Preheat oven to 350°F. Grease a 2.5 quart or 9x9-inch baking dish with butter or nonstick spray.
Bring a large pot of salted water to a boil. Cook the elbow macaroni just until al dente, according to package directions. Drain well and set aside.
In a large saucepan or Dutch oven over medium heat, melt the butter. Once melted, whisk in flour and cook for 1–2 minutes, whisking constantly, until smooth and lightly golden.
Slowly whisk in the evaporated milk and half-and-half. Continue whisking until the mixture is smooth and begins to thicken, about 3–5 minutes.
Stir in salt, pepper, paprika, and cayenne.
Reduce heat to low and gradually add the shredded cheese, stirring until fully melted and smooth. Remove from heat once the sauce is creamy and thick.
Add the cooked macaroni to the cheese sauce and stir until evenly coated. Pour and spread evenly into the prepared pan.
Bake uncovered for 22-26 minutes, until bubbling around the edges and lightly golden on top. Broil 1 minute if desired. Rest for 5 minutes before serving.