In a large Dutch oven or heavy-bottomed pot, heat the olive oil over medium heat. Add the chopped yellow onion and a pinch of salt. Cook, stirring occasionally, for 5-7 minutes, until the onion is soft and translucent.
Add the minced garlic and cook for another minute until fragrant.
Pour in the two cans of fire-roasted tomatoes, vegetable broth, dried oregano, and dried basil. Stir to combine. Bring the mixture to a simmer, then reduce the heat to low.
Cover the pot and let the soup simmer for at least 15-20 minutes to allow the flavors to meld.
Turn off the heat. Use an immersion blender to carefully puree the soup directly in the pot until completely smooth. Alternatively, transfer the soup in batches to a regular blender and blend until smooth, then return to the pot.
Stir in the heavy cream. Season generously with salt and black pepper to taste. Keep the soup warm over low heat while you prepare the sandwiches.
Lay out the 8 slices of bread. Generously spread softened butter on one side of each slice.
On the unbuttered side of four slices, layer the shredded sharp cheddar and Gruyère cheese. Top with the remaining four slices of bread, buttered-side-up.
Heat a large non-stick skillet or griddle over medium-low heat. Place the sandwiches in the pan and cook for 3-5 minutes per side, until the bread is deeply golden brown and crisp, and the cheese is completely melted. Press down gently with a spatula to help the cheese melt evenly.
Ladle the hot soup into bowls, garnish with fresh basil, and serve immediately with the grilled cheese sandwiches for dunking.