Melt the butter and olive oil together over medium heat. When the fat is hot, add your onions and stir to coat well. Add a pinch of salt and a sprig of thyme and cook for about 10 minutes, stirring frequently. During the first 10 or so minutes, the onions will soften and release water.
Add garlic, stir and continue cooking for another 20 to 50 minutes, stirring frequently. You can add a pinch of sugar to help the process along. Turn down the heat if the onions start to brown too rapidly. When they start to stick to the pan, deglaze with a little bit of wine, water or broth. You want your onions to slowly darken and never burn or crisp.
When the onions are done, add the wine and deglaze the pan by scraping up any bits that are stuck to the bottom of the pan. Cook for a minute or two and add your stock and mustard. Bring to a boil and turn down the heat to low and cook for about 10 minutes. Taste and adjust flavor using salt, pepper, balsamic vinegar and Worcestershire sauce.
Heat the broiler to high and toast the bread on both sides until golden brown. Pour the hot soup into oven proof bowls. Float a slice of bread on top of the soup. Put a quarter cup of gruyere and 2 T grated parmesan on top of each slice of bread. Pop it in the oven several inches below the broiler and melt cheese for 2-3 minutes until brown and bubbly.