Heat butter and olive oil in a large pot over medium heat.
Add onions and garlic, cook until caramelized, about 30-40 minutes.
Sprinkle flour over onions, stir evenly, and cook 2-3 minutes.
Pour in broth, wine, Worcestershire, and bay leaf. Simmer for 15-20 minutes.
Preheat the oven to 400°F (200°C). Toast baguette slices 5-7 minutes.
Remove bay leaf, and ladle soup into oven-safe bowls.
Place toasted baguette slices in each bowl.
Sprinkle Gruyere and Parmesan on baguette and soup.
Bake bowls in the oven for 10-12 minutes until the cheese melts.