Heat a large Dutch oven or soup pot over medium-high heat. Add the bacon and cook, stirring frequently, until crisp. Remove bacon with a slotted spoon, leaving the rendered fat in the pot.
Add carrots, celery, and onion to the pot. Cook over medium-high heat for 4-5 minutes, until the onion softens and begins to brown. If there's excess bacon fat, carefully dab some out with a paper towel.
Stir in garlic, salt, thyme, oregano, parsley, paprika, black pepper, and red pepper flakes. Cook for 1 minute to bloom the spices.
Pour in the chicken broth, scraping the bottom of the pot to release any browned bits.
Rinse the beans in a fine mesh sieve. In a blender, puree ¾ cup of the beans with the half and half until smooth.
Add the whole beans, bacon, and bean puree to the pot. Bring the mixture to a simmer, then cover and reduce the heat to medium-low. Simmer for 10-15 minutes, or until the vegetables are tender.
Stir in the grated Parmesan and optional parsley or spinach. Taste and adjust seasoning if necessary.
For a thicker soup, dissolve 1 tablespoon of cornstarch in 2 tablespoons of cream or water. Stir this mixture into the soup while simmering.
