Preheat the oven to 375°F (190°C). Grease a 9×13-inch baking dish.
Cook the macaroni in a large pot of salted boiling water until just al dente. Drain and set aside.
In a large saucepan over medium heat, melt the butter. Whisk in the flour and cook for about 1–2 minutes to form a roux.
Gradually whisk in the milk and heavy cream, stirring constantly until smooth. Continue stirring as the mixture simmers and thickens (about 5 minutes).
Stir in salt, pepper, garlic powder, and smoked paprika (if using). Remove from heat.
Add 3 cups of cheddar and 1 cup of mozzarella to the sauce, stirring until fully melted and smooth.
Mix the cooked macaroni into the cheese sauce, ensuring each piece is coated.
Transfer half the macaroni-and-cheese mixture into the prepared baking dish. Sprinkle half the remaining cheddar and mozzarella over it. Layer the rest of the macaroni-cheese mixture on top, then finish with the remaining cheese to form a cheesy top layer.
Bake uncovered for 20–25 minutes, until the top is bubbly and turns golden.
Let rest for about 5 minutes before serving so the sauce sets slightly for creamy texture.