Melt butter and olive oil in a large pot over medium heat.
Add onion, carrots, and celery; sauté for 6-8 minutes until soft.
Stir in garlic and cook for an additional 1-2 minutes.
Sprinkle flour over sautéed vegetables and stir to coat; cook for 2-3 minutes until light golden.
Slowly pour in chicken broth while whisking; bring to a simmer for 10-12 minutes, stirring occasionally.
Reduce heat to low; mix in milk and cream.
Gradually add Parmesan cheese, stirring until melted and smooth.
Stir in thyme, basil, red pepper flakes, and nutmeg.
Optionally add chicken or sausage and simmer for 5-10 minutes.
Use an immersion blender for a smoother texture, or leave as is for chunkier soup.
Taste and adjust seasoning with salt and pepper.
Thin with more broth or cream if too thick.