Bring a large pot of salted water to a boil and cook pasta according to package instructions.
Meanwhile, melt the butter in a sauce pan.
Whisk in the flour until smooth.
Slowly pour in the milk, then add in the salt, pepper, garlic and onion powders and simmer over low heat until the milk starts to thicken, whisking regularly.
Remove from the heat and whisk in the cheeses until melted. I like this particular combination of cheeses for a creamy and sharp flavor that's not too sharp, but you can easily customize depending on your preference.
Taste and adjust as desired.
Combine the sauce with the pasta and stir to combine.
If you want to create a "baked" mac and cheese, transfer to a baking dish, top with about 1/3 cup of breadcrumbs and 1/4 cup of parmesan and broil for 3-5 minutes or until the top is golden brown.
Broiling works better than baking for this recipe because it will crisp the top without drying out the mac and cheese and keep it nice and cheesy!
Serve immediately and enjoy!