Cook the pasta. Bring a large pot of salted water to a boil. Cook pasta until just shy of al dente (about 1 minute less than the package).
Drain and set aside. Toss with a drizzle of oil to prevent sticking.
Season the shrimp. Pat shrimp dry. Season with 1/2 teaspoon salt, 1/4 teaspoon black pepper, and a pinch of smoked paprika.
Dry shrimp sear better and stay juicy.
Sear the shrimp. Heat a large skillet over medium-high. Add 1 tablespoon olive oil and 1 tablespoon butter. Add shrimp in a single layer and cook 1–2 minutes per side until just pink and opaque.
Remove to a plate. Do not overcook.
Flavor the pan. Lower heat to medium. Add another 1 tablespoon butter and the minced garlic.
Sauté 30 seconds until fragrant. Stir in lemon zest and juice. Scrape up any browned bits.
Add shrimp back in, toss, then remove shrimp again to keep them from overcooking. Reserve the garlicky pan juices.
Make the roux. In a large pot or Dutch oven, melt remaining 2 tablespoons butter over medium heat. Whisk in flour and cook 1–2 minutes, stirring, until it smells toasty but not browned.
Build the sauce. Slowly whisk in warm milk and cream, a little at a time, until smooth.
Keep whisking until the sauce gently bubbles and thickens enough to coat a spoon, 4–6 minutes.
Add cheese and seasonings. Off the heat, stir in cheddar, Gruyère or Jack, and Parmesan until melted. Add Dijon, smoked paprika, cayenne if using, 1 teaspoon salt, and 1/2 teaspoon pepper. Taste and adjust.
The sauce should be well seasoned.
Combine pasta and shrimp. Stir cooked pasta into the cheese sauce. Fold in the shrimp and any reserved pan juices. Sprinkle in parsley.
If the sauce seems thick, thin with a splash of warm milk.
Optional bake. Transfer to a buttered 9x13-inch dish. Top with buttery panko and a little extra Parmesan. Broil on the top rack 2–3 minutes until golden and bubbly.
Watch closely.
Rest and serve. Let it sit 5 minutes so the sauce settles. Finish with a squeeze of lemon and cracked pepper. Serve warm.