Heat olive oil and butter in a large pot over medium-high heat. Add onions, carrots, and salt and pepper (to taste; I add 1/2 teaspoon each). Cook, stirring occasionally, until very tender and golden. Add garlic and cook 1 minute longer.
Sprinkle flour over the vegetables and stir constantly for 1–2 minutes. Slowly whisk in chicken broth, then water, scraping the bottom of the pot to deglaze.
Stir in the dried herbs and bay leaves. Bring to a boil, then add the broken-up pasta pieces. Cook, stirring occasionally so it doesn't catch, for 2 minutes less than the package says.
Remove the bay leaves. Lower the heat and stir in the cream, spinach, chicken, and Parmesan (a small handful at a time) until melted and smooth. Taste and adjust seasoning. For a thinner soup, add more broth; for a thicker soup, increase the heat and simmer a bit longer.
Ladle the soup into bowls and top with extra Parmesan. Add red pepper flakes for a kick if desired, and serve hot with buttered bread.
Video
Notes
Note 1: A good chicken broth makes a huge difference in flavor. I recommend using Swanson®.Note 2: The secret to this soup is the Parm! Always use refrigerated Parmesan—never the shelf-stable kind (it’s not real cheese!). Go for good-quality grated Parmesan with a sandy texture for the best flavor and perfect saltiness.Storage: Store leftovers in an airtight container for 3–4 days. The pasta will keep soaking up liquid, so use a wire skimmer to remove it and store it separately from the broth.