Sauté the Aromatics: In a large soup pot, heat the olive oil over medium-high heat. Once shimmering, add the chopped carrots, onions, and celery. Cook for about 5–6 minutes, stirring occasionally, until the vegetables soften and become fragrant.
Build the Soup Base: Pour in the diced tomatoes with their juice, followed by the tomato paste, chicken broth, oregano, and dried basil. Stir to combine and bring the mixture to a gentle boil. Reduce the heat and simmer for 10–12 minutes, or until the vegetables are completely tender.
Blend for Smoothness (Optional): If you prefer a smooth texture, use an immersion blender directly in the pot to purée the soup until velvety. Alternatively, carefully transfer the mixture in batches to a countertop blender and blend until smooth. Return the soup to the pot after blending.
Make a Velvety Roux: In a separate medium saucepan, melt the butter over medium-low heat. Whisk in the flour and cook, stirring constantly, for about 8–10 minutes until the mixture turns a rich, golden brown. This roux will give the soup its creamy body.
Incorporate Soup into Roux: Ladle a generous scoop of hot soup into the roux. Stir well to form a thick, smooth paste. Gradually add two or three more ladles of soup, whisking continuously to blend evenly and avoid lumps.
Combine and Finish: Pour the roux mixture back into the main soup pot. Stir to fully incorporate. Add the Parmesan cheese, half and half, salt, pepper, and chopped fresh basil. Let the soup simmer gently for a few more minutes until everything is heated through and flavors meld together.