I think list shifter will be the solution to your overall speed problem. I used it recently for a shopping cart and the speed improvement was awesome.
Other things that your post talk about lead me to have some questions about your user experience.
When you create a shopping list and then have things set up for the user to change the number of servings for a particular recipe, is that change going to take place before they are able to start selecting if they have already bought an item or not?
Also, is this app meant to be used by people who are currently in the supermarket and on the fly want to select a recipe and get the shopping list?