In a medium pot, melt 2 tbsp butter over medium heat. Add the 1 cup uncooked basmati rice and toast for 2–3 minutes until fragrant. Add 2 1/2 cups beef broth and 1 cup whole milk. Tip to prevent curdling: keep heat at medium or lower, add the milk while stirring, and maintain a gentle simmer. Season with 1 tsp salt and 1 tsp pepper. Simmer uncovered for 15 minutes, stirring occasionally.
In a separate skillet, melt the remaining 2 tbsp butter over medium-low heat. Add the sliced onions and cook 20–30 minutes until deep golden and caramelized. Deglaze with 1/4 cup white wine. Add 1 tbsp Worcestershire, 1 tbsp balsamic vinegar, and 1 tsp dried thyme. Simmer 2–3 minutes, then stir into the rice.
Transfer the mixture to a skillet or baking dish. Top with Parmesan or Gruyere and mozzarella. Broil 2–4 minutes until bubbly and browned.