In a large, heavy-bottomed pot, heat 2 tablespoons butter and 2 tablespoons olive oil over medium heat.
Add sliced onions and a pinch of salt. Reduce heat to medium-low and cook for 35-45 minutes, stirring occasionally, until deeply caramelized.
Add minced garlic and cook for 1 minute until fragrant.
Deglaze the pot with ½ cup beef broth, scraping up all browned bits.
Add thyme sprigs, bay leaves, and remaining 2 tablespoons butter.
Add rice and stir to coat with butter and onion mixture. Toast for 2 minutes.
Pour in remaining 3½ cups beef broth, salt, and pepper. Bring to a boil.
Reduce heat to low, cover, and simmer for 18-20 minutes until rice is tender.
Remove from heat. Discard thyme sprigs and bay leaves.
Stir in 1 cup Gruyère and all Parmesan cheese until melted.
Top with remaining ½ cup Gruyère and garnish with parsley before serving.