In a large heavy-bottomed pot or Dutch oven, melt the butter with the olive oil over medium heat. Add the sliced onions and cook, stirring occasionally, until deeply caramelized and rich brown in color, about 45 to 50 minutes.
Add the minced garlic and fresh thyme to the caramelized onions, cooking for 1 minute until fragrant. Pour in the white wine to deglaze the pot, scraping up any browned bits from the bottom.
Stir in the beef broth. Bring the soup to a gentle simmer, cover partially, and let it cook for 20 to 30 minutes to allow the flavors to meld together. Season with salt and freshly ground black pepper to taste.
Preheat the oven broiler. Arrange the oven-safe soup bowls or crocks on a sturdy baking sheet. Ladle the hot soup into each bowl, leaving about an inch of space at the top.
Place 1 or 2 toasted baguette slices onto the surface of the soup in each bowl. Generously heap the shredded Gruyère and grated Parmesan cheese over the bread, ensuring it covers the edges of the bowl.
Carefully transfer the baking sheet to the oven and broil for 3 to 5 minutes, keeping a close eye on it, until the cheesy crust is melted, bubbling, and beautifully golden brown. Serve immediately.