Sauté the aromatics: In a large pot over medium heat, warm the olive oil or butter.
Add the onion and carrot with a pinch of salt. Cook, stirring occasionally, until soft and lightly golden, about 6–8 minutes.
Add garlic and tomato paste: Stir in the garlic and cook for 30 seconds until fragrant. Add the tomato paste and cook for 1–2 minutes, stirring often, to deepen the flavor.
Add tomatoes and broth: Pour in the canned tomatoes with their juices.
If using whole tomatoes, crush them with a spoon. Add the broth, oregano, bay leaf, and sugar if using. Season with a little more salt and pepper.
Simmer: Bring to a gentle boil, then reduce to a simmer.
Cook uncovered for 15–20 minutes to blend the flavors. Stir occasionally to prevent sticking.
Blend until smooth: Remove the bay leaf. Use an immersion blender to puree the soup until silky.
If using a countertop blender, carefully blend in batches, venting the lid to release steam. Return the soup to the pot.
Add cream and cheese: Reduce heat to low. Stir in the cream (start with 1/2 cup and add more to taste) and Parmesan if using.
Warm gently for 2–3 minutes. Adjust seasoning with salt, pepper, and red pepper flakes if you like a little heat.
Serve: Ladle into bowls. Top with a drizzle of cream, extra Parmesan, cracked black pepper, and torn basil.
Serve with grilled cheese, toasted sourdough, or crunchy croutons.