Warm the olive oil inside a large soup pot or Dutch oven set over medium-low heat.
Chop the onion, garlic, and shallots; put them into the hot oil and sauté for 3 to 4 minutes, until the onion turns translucent.
Rinse and cut the carrots and celery; place them into the pot and sauté for another 7 to 10 minutes to develop flavor.
Drain and rinse the cannellini beans; add them to the pot together with the bay leaves, Italian seasoning, red pepper flakes, vegetable broth, salt, and pepper.
Bring the mixture up to a boil, then lower the heat to low, cover, and simmer for 15 minutes.
Remove the lid, take out the bay leaves, and discard them.
Ladle 2 cups of the soup into a high-speed blender and process until thick and creamy.
Pour the blended soup back into the pot and stir thoroughly.
Add the spinach and stir until it wilts.
Divide among bowls; top with fresh chopped parsley if desired, accompany with crusty bread, and enjoy.