Caramelize the onions: In a large heavy-bottomed pot or Dutch oven, melt the butter with olive oil over medium heat. Add the sliced onions and sprinkle them with sugar and salt. Stir often, letting them slowly soften and turn a golden brown color. This process will take around 30–40 minutes—don’t rush it, as this is what develops the deep, rich flavor of the soup. If the onions start to stick, add a splash of water or broth to loosen them.
Add the flour and deglaze: Once the onions are soft and caramel-colored, sprinkle in the flour and stir until it’s fully incorporated—this helps thicken the soup slightly. Cook for another 2 minutes, then pour in the white wine (if using). Stir and scrape up any browned bits stuck to the bottom of the pot for extra flavor.
Simmer the soup: Pour in the beef broth, Worcestershire sauce, thyme, bay leaf, and pepper. Bring the soup to a gentle boil, then reduce the heat and let it simmer uncovered for 25–30 minutes, allowing the flavors to blend. Remove the bay leaf before serving.
Prepare the bread topping: While the soup simmers, preheat your oven’s broiler. Arrange the baguette slices on a baking sheet and toast them lightly on both sides. Mix the Gruyère, mozzarella, and Parmesan cheeses in a bowl. Sprinkle a bit of the cheese mixture over each toasted slice and return them under the broiler until bubbly and golden brown.
Assemble and serve: Ladle the hot soup into oven-safe bowls. Place a cheesy toast on top of each serving and sprinkle a little more cheese over it if desired. Broil the bowls briefly, just until the cheese melts into a gooey, golden crust. Serve immediately and enjoy the comforting, steakhouse-style warmth in every bite.