Bring a medium pot of water to a rolling boil. Add enough salt to heavily season the water. Add the pasta and cook it according the to directions to make it al dente. Or you can cook it 1-2 minutes less than the package instructions.
In the meantime, while the pasta cooks, make the sauce. In a medium sauce pot, melt the butter. Do not allow it to brown. Sprinkle in the flour and whisk to make a roux. Cook the roux for about 2-3 minutes to cook out the raw flour flavor. Just make sure you keep the heat to low so that you do not brown the roux. We are looking for a blonde roux here.
Once the roux is ready, add in the milk or half and half. Make sure you are whisking the whole time so that you do not get clumps in your sauce. Bring the sauce to a simmer and season with kosher salt, freshly cracked black pepper and paprika. Whisk that altogether into the sauce.
Add in all the cheeses and whisk all together until the cheeses are melted and the sauce is smooth. Remove from the heat. Drain the pasta and keep about 1/2-3/4 cup of the pasta water just in case your sauce gets too thick.
Add the drained pasta into the pot with the sauce. Stir everything together and if it is too thick, add in a little of the pasta water. Serve immediately. I like to serve it with steamed broccoli for the kids and BBQ ribs and broccoli for the grown ups! ENJOY!