Cook the pasta: In a large pot of salted boiling water, cook macaroni until al dente (6-8 minutes). Drain, reserving ½ cup pasta water.
Make the roux: In a large saucepan, melt butter over medium heat. Whisk in flour and cook for 1-2 minutes until golden.
Build the sauce: Gradually whisk in milk and white wine (if using). Cook, stirring, until thickened (3-5 minutes). Add reserved pasta water if too thick.
Add cheese and seasonings: Lower heat. Stir in cheddar, Gruyère, Parmesan, Dijon mustard, smoked paprika, salt, and pepper. Stir until smooth.
Combine: Add cooked pasta to the sauce, stirring to coat. Mix in bacon or mushrooms if using.
Bake (optional): Preheat oven to 375°F. Transfer to a greased 9x13 dish. Mix panko, melted butter, and Parmesan. Sprinkle over pasta and bake for 15-20 minutes until golden.
Serve: Garnish with parsley or extra bacon and serve hot.