Heat the butter and olive oil in a Dutch oven or stock pot on medium heat. Stir in the onions until they are completely coated with the melted butter and oil. Allow them to cook until the bottom starts to turn a light golden brown, then stir. Repeat this process, stirring occasionally until all of the onions are a deep golden brown color, about 35-45 minutes, stirring more frequently toward the end.
Once the onions are caramelized, add the garlic, stir and cook for an additional 1-2 minutes. Stir in the flour. Cook for another 1-2 minutes, stirring consistently.
Pour in the white wine to deglaze the pot. Use a wooden spoon or something similar to scrape the brown off the bottom. Cook for about 3-5 minutes. Stir in the beef broth, Worcestershire sauce, bay leaves, thyme, salt and pepper. Bring to a boil. Once the soup is boiling, turn the heat to low and simmer covered for about 20 minutes. Stir occasionally.
Preheat oven to 400℉. While the soup is simmering, slice your bread and toast in the oven for about 7-10 minutes. Take the bread out and set aside.
Turn the broiler on high. Set up your broiler-safe ramekins or bowls on a baking sheet. Dish the soup into the bowls and gently set the toasted bread on top followed by the Gruyere and provolone cheese. Place them in the broiler for about 3-5 minutes, consistently checking to make certain that the cheese is not burning.
Once the cheese turns golden brown, take the soup out of the broiler. Allow it to cool down before serving. Garnish with fresh thyme and enjoy!