Bring about 8 -10 cups of water to boil in a large pot on the stove-top, over high heat. Once boiling, add a generous sprinkling of salt to the pot and add the pasta. Cook pasta for 2 minutes less than recommended on the package, or to just al dente. Drain well and rinse with cold water to stop the pasta from cooking further. *While water is boiling and pasta is cooking, you can start your cheese sauce.
For the cheese sauce: In a large saucepan, melt the butter over medium heat. Whisk in the flour and continue to whisk and cook for about 2 minutes.
Very slowly add the milk, a little at a time, whisking constantly. Once all the milk has been added, cook, stirring frequently until the sauce thickens, about 8-10 minutes. (Don't rush this step! The mixture will not get super thick, but you will notice it thicken to the point where it will nicely coat the back of a spoon after 8-10 minutes of cooking and stirring.)
Remove the saucepan from the heat. Add the crumbled/grated cheese, salt, chili powder and garlic powder. Stir until the cheese is melted and all the ingredients are incorporated, about 3 minutes. (If the cheese isn't melted completely after about 3 minutes, you can put the pan back on low heat and stir until it is melted). Set aside for a minute while you wait for the pasta to cook.
Preheat oven to 350F (175C) with rack in the centre of the oven. Oil or butter an 8-inch square baking dish, an 8-inch cast-iron skillet or individual baking dishes.
Once the pasta is cook, drained, rinsed in cold water and drained well again, add it to the cheese sauce and mix gently, but thoroughly. (It might look like too much sauce/too little pasta, but trust me, it will all be good in the end). Spoon or ladle the mixture into a prepared baking dish or individual dishes. Sprinkle the top of each with either the Cheese/Chili topping ingredients or mix together the panko/breadcrumbs with the melted butter and scatter over-top.
Bake in the preheated 350F (175C) oven uncovered for 20 to 25 minutes, or until the sauce has bubbled up around the edges and the top has a nice golden crust. Let sit for a few minutes before serving.
Always start with a block of cheese and grate it yourself. Pre-shredded cheese if often coated with an anti-clumping agent, which can affect the quality of your finished sauce.To ensure your macaroni doesn't get too soft, be sure to cook it 2 minutes less than you normally would, about 8 minutes. Rinsing well with cold water after draining will stop the cooking process and will also ensure your pasta doesn't get too soft.When crumbling your cheese, don't leave the crumbles too large. They need to melt by only the heat from the sauce. This process of turning off the heat, then adding the cheese to melt without bottom heat, helps to ensure the cheese doesn't become grainy and is the secret to a smooth, creamy sauce for your macaroni and cheese!Add a bit more salt if you need to. Taste your cheese sauce before adding the pasta and add a bit more salt if you think it needs it. Proper salting makes all the flavours here really shine.Be sure to read the notes above the recipe card, for more tips, options, substitutions and variations for this recipe!