Preheat the oven.
Set your oven to 375°F (190°C) and lightly butter a 9×13-inch baking dish.
Prepare the sauce.
In a medium saucepan, melt the butter over medium heat. Add the flour and whisk for about 1 minute until smooth and lightly golden. Slowly pour in the milk and cream, whisking constantly to avoid lumps.
Add flavor.
Stir in the garlic, salt, pepper, onion powder, and paprika. Continue whisking until the sauce thickens and gently coats the back of a spoon, about 5–7 minutes. Remove from heat and stir in 1 cup of the cheddar cheese and ¼ cup Gruyère until melted.
Layer the potatoes.
Arrange half of the sliced potatoes in the prepared baking dish, overlapping slightly. Pour half of the sauce evenly over the potatoes. Repeat with remaining potatoes and sauce, spreading to cover completely.
Top with cheese.
Sprinkle the remaining cheddar and Gruyère evenly on top, then dust with Parmesan.
Bake until golden and bubbly.
Cover with foil and bake for 35 minutes. Remove the foil and continue baking for another 25–30 minutes, until the potatoes are tender and the top is golden brown.
Rest and serve.
Let the dish rest for 10–15 minutes before serving. The sauce will thicken as it cools slightly, making it easier to serve neat portions.