Heat butter in a large dutch oven over medium heat. Add sliced onions and season with salt and black pepper, to taste. Stir to combine. Cook, stirring occasionally, until caramelized, approximately 45 minutes to one hour.
Deglaze the bottom of the pan by adding the red wine and balsamic vinegar and gently scraping the browned bits off the bottom with a spatula.
Add the broth, bay leaves, Italian seasoning, garlic powder, and sprigs of fresh thyme. Season with additional salt and black pepper, if desired, and stir to combine.
Increase heat to high and bring to a rapid boil, then immediately reduce heat to medium-low and add Worcestershire, stirring to combine. Loosely cover the dutch oven with a lid and simmer, stirring occasionally, for two hours.
Remove from heat and discard the thyme stems and bay leaves. Divide the soup between four large oven-safe ramekins or bowl. Top with slices of the Gruyère cheese, followed by the freshly grated Parmesan cheese.
Place top oven rack in the second position from top and set the broiler to high.
Arrange ramekins on a large, rimmed baking sheet and place on the top oven rack. Broil until the cheese is melted and golden brown, approximately 8-10 minutes. Remove from oven and serve immediately garnished with a few fresh thyme leaves. Enjoy!