Melt the butter in a large pot over medium heat.
Add the diced onion and sauté until soft, about 3–4 minutes.
Stir in the minced garlic and cook for another minute, until fragrant.
Add the crushed tomatoes, broth, salt, pepper, sugar, basil, and tomato paste. Stir well.
Bring the soup to a gentle simmer and let it cook for 15–20 minutes, stirring occasionally.
Use an immersion blender to blend the soup until smooth. If using a regular blender, carefully transfer the soup in batches and blend until silky.
Return the soup to the pot and reduce the heat to low.
Stir in the heavy cream and whole milk.
Let it warm for another 3–5 minutes without boiling.
Taste and adjust seasoning if needed. If the soup is too thick, add a little more broth until you reach your desired consistency.
Serve hot with crusty bread, croutons, or a sprinkle of grated Parmesan cheese.