Cook and drain the pasta according to package instructions. I prefer my pasta a firm al dente for this recipe as the pasta will cook slightly more in the cheese sauce.
In a large pan, over medium heat, melt the butter and whisk in the flour to create a roux. Cook for 1 - 2 minutes and make sure all the flour has been coated in the butter.
Slowly whisk in the dairy, making sure to scrape all the roux out of the corners of the pan. Continue whisking every few minutes until the mixture is steamy, heated through out, and slightly thickened. Do not bring to a boil!
Turn off the heat and temper the eggs. In a separate bowl, slowly pour a couple ladles of the cream mixture over the beaten eggs while constantly whisking. Once the eggs have been tempered, pour the egg and cream mixture back into the pot and whisk for another minute to fully incorporate the eggs into the cream mixture.If you have not tempered eggs before please see video for more details After tempering the eggs, and with the heat still off, slowly whisk in the cheese in batches. You want the cheese to melt slowly as this will yield the best cheese sauce. If the cheese is struggling to melt near the end, turn the burner on low to finish it off.
Add the optional paprika, garlic and onion powder and then seasoning with salt and pepper to taste.
Combine the pasta and the cheese sauce and then enjoy immediately!