Heat butter and olive oil in a large skillet or Dutch oven over medium-low heat. Add the sliced onions with a pinch of salt. Stir to coat in the butter/oil. Cook slowly for 25-30 minutes, stirring occasionally, until the onions are deeply golden and caramelized and soft. Tip: If onions start to burn, add a splash of water or broth and lower the heat. Patience is key...this step develops the deep, sweet-savory flavor.
Add the garlic, thyme, and black pepper, cooking until fragrant (1 minute). Pour in the white wine (if using) and scrape up the browned bits from the bottom of the pan. Cook until the wine has mostly evaporated. If you aren't using white wine, add the beef broth at this step.
Stir in the beef broth and simmer for 5 minutes. Add pasta and cook until perfectly al dente, according to package instructions. Taste the pasta to make sure it is done cooking. Lower heat, add the cream, and stir until the sauce is silky. Add Worcestershire sauce, if using. Taste and add a pinch of salt or more pepper if needed. The cheeses will add a more salty flavor as well.
Off the heat, stir in the shredded Gruyère and parmesan cheese until melted and creamy. Garnish with extra parmesan and serve immediately.