Cook macaroni for half the time of the package instructions. Drain and set aside.
Fry bacon until slightly, but not overly, crispy. Drain on a paper towel. Reserve grease.
Melt 4 tablespoons butter in a skillet and then saute onions over medium-low heat for 10 to 12 minutes, or until golden brown and soft. Set aside.
In a pot, melt 4 tablespoons butter (and add 1 tablespoon of the reserved bacon grease for good measure!). Sprinkle in flour and whisk to combine. Cook, stirring constantly, over medium heat for 1 minute. Pour in milk and half & half, then cook for 3 to 5 minutes or until thick. Reduce heat to low. Add salt & pepper to taste. (Do not undersalt!).
Beat egg yolks and drizzle 1/4 cup hot mixture into the yolks, stirring constantly. Stir to combine. Pour egg mixture into sauce and cook for another minute.
Add cheeses and stir until melted. Add onions and bacon and stir. Taste for seasonings and add more salt if needed. Add cooked macaroni and stir to coat.
Pour into a baking dish and bake for 15 to 20 minutes or until sizzling and hot.
*NOTES* To make this more kid friendly and a little more frugal, I use Sharp Cheddar, Mozzarella, Monetary Jack and Cream Cheese for the cheeses.
I also find it easiest if I measure out and prepare all the ingredients first before I even begin cooking.*.