Heat oven to 350 degrees. Coat a 3-quart rectangular baking dish with non-stick spray
Bring a large pot of lightly salted water to boiling. Cook pasta to al dente, typically what it says on the package (7-9 minutes) keeping in mind that it will bake for another 30 minutes in the oven. Drain and rinse with cool water. Place in baking dish.
Toss all the shredded cheeses together in a large bowl, set aside. Separate ½ cup to sprinkle on top
Melt butter in a medium-sized saucepan over medium heat. Whisk in the flour until smooth and slightly bubbly. Cook for 1-2minutes to cook the flour thoroughly. The longer you cook it the darker it will get. Apparently there are 12 shades of Mornay sauce, but I don’t have the patience to get beyond 1-2 minutes!
Add 1/3 of the milk and whisk thoroughly while it comes back to a slow boil. Boil gently for a minute or two and then whisk in the remainder of the milk. Stir in the salt, nutmeg, dried mustard and cayenne.
Bring to a boil over medium high heat. Reduce heat and simmer 3 minutes. Remove from heat; whisk in cheese mixture (all but ½ cup) and stir until smooth.
Before proceeding, add any optional ingredients (sauteed onions, spinach, ground meat or bacon) to the cooked pasta.
Pour the Mornay sauce into the baking dish and add a generous cup of the reserved cheese on top.
Sprinkle bread crumbs to the top of mixture.
Cover with foil and bake at 350 degrees for 25 minutes. Remove foil and broil for 5 minutes or until crumbs are lightly browned and the cheese is bubbly. Cool slightly before serving.