Preheat the oven to 375 degrees Fahrenheit. Grease an 8 x 8-inch baking dish.
In a large skillet, melt 2 tablespoons of the butter over medium heat. Add the onion and a pinch of salt and cook, stirring occasionally, until browned and caramelized, about 40 minutes.
Cook the pasta according to the package directions, reducing the cooking time by 1 minute. Drain and set aside.
In a large pot, melt the remaining 4 tablespoons butter over medium-high heat. Add the flour, whisking until combined, then cook for 1 minute. Add half the milk, whisking continuously until thickened, about 5 minutes, and then repeat with the other half of the milk. Add the Gruyere and Swiss and all but 2 tablespoons of the Parmesan and stir until the cheeses melt. Stir in the paprika, cayenne, nutmeg, mustard, and black pepper and salt to taste. Stir in the pasta and onions.
Transfer the mixture to the baking dish and top with the panko, a pinch of salt, a few turns of pepper, and the reserved Parmesan and bake until the top is browned, about 25 minutes Cool for 5 minutes and serve with an 8-ounce glass of milk.
Note: In a pinch, you can skip the baking step. Simple cook the pasta fully before stirring it into the cheese sauce, then serve immediately topped with panko and Parmesan.