Warm the oil and butter in a large soup pot over medium heat. Add the onion, garlic, and celery, and cook until soft but not browned, 5 to 7 minutes. Stir in the flour and cook for 1 minute.
Add the tomatoes (with juices), sugar, basil leaves, salt, black pepper, and cayenne (if using). Increase the heat to high and bring the tomatoes to a boil. Reduce the heat to medium and simmer for 15 minutes, skimming off and discarding any foam from the surface.
Puree the soup in a blender, in batches if necessary; then pass the puree through a medium-mesh strainer, pressing on and discarding the solids. Return the soup to the pot to keep it warm.
Just before serving, stir in the chopped basil. Divide the soup among four bowls and serve it with the rolls.
Tip: Ripe tomatoes are the key to great taste here. Sample the soup before serving, and add a touch more sugar or salt if the tomatoes need it.
This soup can be refrigerated for up to three days and tastes delicious cold.