Roast the garlic: Heat the oven to 400°F (200°C). Slice the tops off two garlic heads to expose the cloves. Drizzle with olive oil, wrap tightly in foil, and roast for 35–40 minutes until soft and golden.
Let cool slightly, then squeeze out the cloves. Set aside.
Sauté the aromatics: In a large pot or Dutch oven, warm 2 tablespoons olive oil over medium heat. Add the diced onion and a pinch of salt.
Cook 6–8 minutes, stirring, until soft and lightly translucent.
Bloom the tomato paste: Stir in the tomato paste and cook 2–3 minutes until it darkens slightly and smells sweet. This step deepens the tomato flavor.
Add tomatoes and broth: Pour in the crushed tomatoes (or hand-crush whole peeled tomatoes as you add them) and 3 cups broth. If using, add the Parmesan rind now.
Stir in the roasted garlic, sugar, salt, black pepper, and red pepper flakes.
Simmer: Bring to a gentle simmer and cook uncovered for 20–25 minutes, stirring occasionally. Add more broth if the soup seems too thick.
Add basil and blend: Remove the Parmesan rind if used. Add the basil leaves and blend until smooth using an immersion blender.
Alternatively, carefully blend in batches in a countertop blender, venting the lid to release steam.
Finish with cream: Return the soup to low heat. Stir in the heavy cream (start with 1/2 cup and add more to taste) and the butter for extra silkiness. Warm gently for 2–3 minutes.
Do not boil after adding cream.
Taste and adjust: Add more salt, pepper, or sugar if needed. If the soup is too tangy, a splash more cream or a pinch of sugar will balance it. If it’s too thick, thin with a bit more broth.
Serve: Ladle into bowls.
Top with torn basil, a drizzle of olive oil, and cracked black pepper. Add shaved Parmesan if you’d like and serve with toasted bread or grilled cheese.