Bring a large pot of salted water to a boil. Add the pasta and cook it just until al dente, about 11 minutes. Drain the pasta then set it aside.
In a medium saucepan set over medium heat, warm the milk until it is simmering then set it aside.
In a large heavy-bottomed stock pot, melt the butter over medium heat. Once the butter has melted, whisk in the flour and cook the mixture, whisking constantly, until it turns light brown in color and has a slightly toasted aroma, about 3 minutes.
Remove the pot from the heat then slowly whisk the warm milk into the flour mixture. Continue whisking constantly to avoid any lumps. (The mixture will become very thick and then thin out gradually until it is smooth.)
Return the pot to the stove over medium-high heat and cook the mixture while whisking constantly until it has thickened enough to coat the back of a spoon, about 2 minutes. Season the mixture with salt and pepper and reduce the heat to medium. Stir in the cheddar and Parmesan cheeses until they are melted and the cheese sauce is smooth. Add the pasta, stirring to combine, and cook just until the pasta is warmed throughout. Serve immediately.