Prepare the base: Heat olive oil in a Dutch oven or large pot over medium heat. Add diced onion and cook for 5-6 minutes until softened and translucent. Add minced garlic and cook for another 30-60 seconds until fragrant, being careful not to burn it.
Cook the mushrooms: Add mushrooms to the pot, but don't overcrowd them. Cook in batches if necessary. Allow them to release their moisture and then brown, about 5-7 minutes. They should become golden and slightly caramelized.
Build flavor: Stir in tomato paste and cook for about 1 minute, allowing it to darken slightly and coat the vegetables.
Add tomatoes: Add the canned tomatoes with their juice. Use your wooden spoon to break the tomatoes into smaller pieces.
Simmer: Pour in the broth and season with salt, pepper, and red pepper flakes if using. Bring to a boil, then reduce heat to maintain a gentle simmer. Cook uncovered for 25-30 minutes, allowing the flavors to develop and the soup to reduce slightly.
Finish with cheese: Remove the pot from heat and stir in the grated Parmesan cheese until melted and incorporated.
Adjust texture: For a partially smooth texture, use an immersion blender to briefly blend some of the soup, leaving plenty of chunks for texture. Alternatively, transfer about half the soup to a standard blender, blend until smooth, then return to the pot and stir to combine.
Season and serve: Taste and adjust seasoning if needed. Ladle into bowls, garnish with additional Parmesan cheese, fresh herbs, and a drizzle of good olive oil.