Add the butter to a large rondeau or Dutch oven pot over medium heat until melted and add in the onions and garlic and cook until lightly browned about 5-7 minutes.
Next, stir in the flour until completely combined and add in the milk and bring to a boil over high heat.
Once the milk becomes thick, stir in 2 cups each of each cheese, totaling 6 cups of shredded cheese and whisk until smooth.
Turn the heat down to low and finish with salt and pepper. Keep warm.
In the meantime, boil the noodles in a large pot of boiling salted water for 6-8 minutes or until slightly crunchy or al dente.
Drain the noodles and transfer them to the pot of cheese sauce and mix thoroughly along with the eggs. Adjust the seasonings with salt and pepper if need be.
Transfer the macaroni and cheese to a large casserole dish and sprinkle on the remaining 1 cup each of the shredded cheese totaling 3 cups of cheese.
Bake in the oven at 350° for 20 minutes or until the cheese is melted.
Make-Ahead: You can make this recipe up to 2 days ahead of time and will need to be reheated before serving. In addition, you can make the recipe without baking, cool it and keep it in the refrigerator for up to 2 days until you are ready to bake and serve it.
How to Reheat: Place your desired amount of macaroni and cheese in a casserole dish and cover with foil and bake at 350° for 10-12 minutes or until hot. Likewise, you can heat on a microwave-safe dish until hot.
How to Store: Cover and keep in the refrigerator for up to 5 days. This will freeze well covered for up to 3 months. Thaw in the refrigerator for 1 day before reheating.
While macaroni noodles are the most common noodle, you can absolutely use things like fusilli or farfalle in substitution.
Feel free to swap out the cheeses with your desired favorites.
If you want a looser macaroni and cheese, then please do not use the eggs.