Boil the macaroni: Bring a large pot of salted water to a boil and cook the elbow macaroni until just al dente, about 7 minutes. Drain well and set aside.
Start the roux: In a saucepan, melt 2 tablespoons of butter over medium heat. Whisk in the flour and cook for 1 to 2 minutes until it turns pale gold and smells nutty.
Add the milk: Pour in the milk slowly while whisking constantly to avoid lumps. Cook for about 5 minutes, stirring often, until the sauce thickens enough to coat the back of a spoon.
Melt in the cheese: Remove the saucepan from the heat and stir in the cheddar and mozzarella a handful at a time. Keep stirring until the sauce turns smooth and glossy, then season with salt and pepper.
Combine pasta and sauce: Fold the drained macaroni into the cheese sauce until every piece is coated. Pour the mixture into a buttered 9x13-inch baking dish and spread it into an even layer.
Make the topping: Melt the remaining 2 tablespoons of butter and toss it with the panko breadcrumbs and smoked paprika. Scatter the mixture evenly over the macaroni.
Bake until golden: Bake at 375°F for 15 to 20 minutes, until the sauce bubbles around the edges and the topping turns deep golden brown.
Broil for extra crunch: For a crispier top, broil the dish for 1 to 2 minutes, watching closely so the panko doesn't burn. Let the dish rest for 5 minutes before serving.