In a large, heavy-bottomed pot or Dutch oven, melt butter with olive oil over medium-low heat. Add sliced onions, salt, and sugar, stirring to coat evenly.
Cook onions slowly, stirring every 10-15 minutes, for 45-60 minutes until deep golden brown and caramelized. If onions begin to stick or brown too quickly, reduce heat and add a splash of water.
Add white wine to deglaze the pot, scraping up any browned bits from the bottom. Cook for 2-3 minutes until wine is mostly evaporated.
Pour in beef stock, add bay leaves and thyme sprigs. Bring to a simmer, then reduce heat and cook for 20 minutes. Season with black pepper and adjust salt to taste.
Preheat broiler. Ladle soup into 4 oven-safe bowls or crocks. Top each with a slice of French bread and divide grated Gruy?re evenly over the bread.
Place bowls on a baking sheet and broil for 2-4 minutes until cheese is melted, bubbly, and golden brown. Serve immediately while hot.
Notes
Storage tip: Soup base keeps in refrigerator for up to 4 days or freezer for 3 months. Add bread and cheese toppings just before serving. For best caramelization, don't rush the onion cooking process-proper caramelization takes time but creates the signature flavor.