Boil the pasta as directed and cook just slightly less than fully -- it's going to bake in the sauce, too. Drain.
Preheat oven to 325°F
In a large saucepan (you'll see why later) melt the butter over medium-low heat then add the flour and stir and cook for 2-3 minutes.
Add the milk and half-and-half and cook over medium head, stirring constantly, until reduced slightly.
Add about 1 cup of the shredded cheese and stir in to melt.
Add the optional ingredients, if so desired. If spinach is one of them, cook until well-wilted.
Remove from heat and add the pasta and stir to coat fully. (This is why you make the sauce in a large pan.)
Grease a suitably sized baking dish. Add half the pasta and sauce. Add some of the remaining shredded cheese. Add the rest of the pasta and sauce. Add the remaining shredded cheese.
If using bread crumbs, distribute across the top.
Bake 15-20 minutes.
Switch oven to broil and cook an additional 2-3 minutes until top starts to brown.
Remove from oven and let rest 5-10 minutes before serving.