Cook the pasta: Bring a large pot of salted water to a boil. Add elbow macaroni and cook just until al dente. Drain and set aside.
Make the roux: In a Dutch oven or large saucepan, melt butter over medium heat. Stir in flour and whisk constantly for 1-2 minutes, until smooth and lightly golden.
Add liquids: Slowly whisk in half & half and milk. Cook, whisking often, until the sauce thickens, about 4-5 minutes.
Season: Stir in garlic, Dijon mustard, salt, pepper, and paprika.
Add cheeses: Lower heat to medium-low. Stir in cream cheese until melted, then add shredded cheese by the handful until creamy and smooth.
Combine: Fold in the cooked pasta, stirring until every noodle is coated.
Serve: Enjoy right away for stove-top macaroni and cheese. For a baked version, transfer to a greased baking dish, tip with extra cheese and breadcrumbs, and bake at 375℉ for 20-25 minutes until golden and bubbling.