Cook pasta according to package, drain and set aside.
To the same pot, add the butter over medium heat to melt.
Add the flour and whisk constantly until the mixture turns light brown and has bubble for about 2 minutes. Cook long enough to cook off the raw flour taste but no so long it gets overly browned.
Slowly add the milk, whisking constantly, making sure to smooth out any possible clumps that formed.
Add the salt, pepper, garlic powder, optional dry mustard and whisk to incorporate.
Add the cheddar, Parmesan & cream cheeses and stir until melted and smooth.
Add the pasta and stir evenly to coat.
Serve immediately. If desired, can be kept in fridge for up to 5 days or freezer for 4 months.