Stir 1 cup panko breadcrumbs, 1 ½ ounces grated Parmesan cheese, 3 tablespoons melted unsalted butter, ½ teaspoon garlic powder, and ¼ teaspoon paprika if desired together in a small bowl until the breadcrumbs are well coated.
Heat oven to 350°F. Meanwhile, bring a large pot of heavily salted water to a boil over medium-high heat. Stir in 1 pound dried elbow macaroni and cook according to package directions for al dente, about 5 minutes. Drain but do not rinse; it’s OK if it clumps.
Melt 4 tablespoons unsalted butter in the now-empty pot over medium heat. Whisk in ¼ cup all-purpose flour to form a thick paste. Cook, whisking often, until smooth, deepened in color, and smells slightly nutty, about 2 minutes.
Whisk in 5 cups whole milk ½ cup at a time, whisking well after each addition. It will sizzle and seize up with the first addition, then turn grainy, and finally smooth out and thicken enough to coat the back of a wooden spoon. Do not let the mixture boil; reduce the heat as needed.
Whisk in 2 teaspoons kosher salt and remove the pot from heat. The sauce should be steaming and between 160°F and 170°F. If it’s above 170°F, let it sit until cool enough.
Whisk in 14 ounces shredded sharp white cheddar cheese and 14 ounces shredded Gruyère cheese a handful at a time, whisking until the cheese is mostly melted between additions. Near the end, the cheese won’t fully melt and this is OK.
Break up the macaroni with a flexible spatula and stir it into the sauce. Transfer to a 9x13-inch or other 3-quart baking dish. Sprinkle the breadcrumb mixture evenly on top.
Bake until the breadcrumbs are golden brown, 20 to 25 minutes. Let cool for at least 10 minutes before serving.
