Heat butter and olive oil in a large pot over medium heat. Add onions and cook, stirring often, until deeply golden and caramelized—this takes about 20-25 minutes, so be patient. It’s worth it.
Add garlic and thyme, stirring for 1-2 minutes until fragrant. Season with salt and pepper.
Pour in the beef broth and bring to a simmer. Stir in the uncooked pasta and cook uncovered, stirring occasionally, until the pasta is al dente and most of the liquid is absorbed, about 10 minutes.
Reduce heat and stir in the cream, Gruyère, and Parmesan until everything is silky and cheesy and beautiful.
Garnish with chopped parsley and serve hot. Maybe even with a hunk of crusty bread. No judgment.