Heat the butter and olive oil in a large Dutch oven or heavy-bottomed pot over medium heat.
Add the sliced onions and toss to coat in the butter/oil. Cook uncovered, stirring occasionally, for 40 to 45 minutes. The onions will shrink significantly and slowly turn a deep, rich caramelized brown. Do not rush this step!
Once the onions are perfectly caramelized, stir in the minced garlic and cook for 1 minute until fragrant.
Pour in the white wine to deglaze the pot, using a wooden spoon to scrape up all the beautiful browned bits from the bottom. Let the wine simmer until mostly evaporated.
Pour in the beef broth, add the fresh thyme sprigs, salt, and black pepper. Bring to a gentle boil, then reduce the heat, cover, and simmer for 15-20 minutes to meld the flavors.
While the soup simmers, preheat your oven's broiler. Place four oven-safe soup crocks or bowls onto a sturdy baking sheet.
Remove the thyme sprigs. Ladle the hot soup evenly into the bowls. Top each bowl with a toasted baguette slice and generously sprinkle the grated Gruyère cheese over the bread and the edges of the bowl.
Carefully transfer the baking sheet to the oven. Broil for 2-4 minutes, watching very closely, until the cheese is melted, bubbly, and beautifully golden brown. Serve immediately!