Cook the pasta in salted, boiling water until very al dente. Drain and chill under cold running water.
Meanwhile, melt the butter in a sauce pan and sautee the diced onion util they're translucent. About 6 minutes. Add the garlic and cook an additional minute.
Turn the heat to medium-low and add the flour. Use a whisk to blend it into the onion-butter mixture. Cook for 2-3 minutes.
Add the warmed milk to the flour mixture in a slow stream, whisking as you go. Once the milk is all whisked in, turn the heat to medium and cook, whisking constantly, until the mixture thickens and boils. Be patient! Milk will scald so go slowly.
Remove the pan from the heat and add the cheeses, salt, pepper, cayenne, and parsley. Mix well.
Mix the hot sauce with the pasta, then gently fold in the tomatoes. Add the mixture to a casserole dish, top with Parmesan cheese, and bake for about 20 minutes at 375-F. Enjoy!