Heat the olive oil in your large pot over medium heat. Add the finely diced onion, carrots, and celery. Cook, stirring occasionally, until the vegetables are soft and the onion turns translucent, about 8-10 minutes.
Stir in the tomato paste, dried oregano, and dried basil leaves. Cook for 2 minutes, allowing the tomato paste to deepen in flavor and coat the veggies nicely.
Add the canned diced tomatoes with their juice, followed by the chicken broth. Stir everything together, bring to a simmer, and let it cook for about 20 minutes to meld the flavors.
While the soup simmers, melt the butter in a separate small saucepan over medium heat. Once melted, whisk in the flour and cook for 1-2 minutes, stirring constantly, until it forms a bubbly, golden paste.
Using an immersion blender, carefully puree the soup directly in the pot until smooth. If you don’t have an immersion blender, transfer the soup in batches to a regular blender and blend until creamy.
Slowly whisk the roux into the pureed soup. Return the pot to low heat and stir in the half and half, grated parmesan cheese, salt, and pepper. Heat gently until warmed through and the cheese melts into the soup.
Turn off the heat and stir in the chopped fresh basil. Serve immediately.