Heat the olive oil and butter in a Dutch oven or large pot over medium heat. Add the onion and cook for 5–7 minutes, stirring occasionally, until softened.
Add the garlic and tomato paste. Cook for 1–2 minutes, stirring frequently, until the garlic is fragrant and the tomato paste darkens slightly.
Add the whole peeled tomatoes and their juices, broth, Italian seasoning, salt, pepper and red pepper flakes, if using. Break up the tomatoes with a wooden spoon.
Bring to a simmer. Reduce the heat and cook uncovered for 20–25 minutes, stirring occasionally.
Remove the pot from the heat and add the basil. Carefully blend with an immersion blender until smooth. If using a countertop blender, work in batches and return the soup to the pot.
Stir in the cream and balsamic vinegar. Taste and add more salt or pepper as needed. If the tomatoes taste especially acidic, stir in the optional sugar or honey. Warm gently before serving.