Bring a large pot of salted water to a boil. Cook the pasta to al dente, drain.
In a large saucepan, melt the butter over medium heat. Sprinkle the flour over and whisk in. Cook the roux for 1-2 minutes to cook off the raw flour taste.
Slowly whisk in the milk until smooth. Simmer until slightly thickened, whisking occasionally so the bottom doesn't burn.
Add the cheese, one handful at a time, whisking well after each one and not adding any more cheese until the previous handful is fully melted and incorporated. Season to taste with salt and pepper.
Add the drained pasta to the cheese sauce and stir to combine.
Pour into a 9 x 13 dish. If desired, bake at 375 for 15-20 minutes.