Preheat the oven to 375 degrees F. Butter a 2-quart shallow casserole dish. In a large pot of salted boiling water, cook the macaroni until al dente, about 5 minutes.
Drain; transfer the pasta to the prepared casserole dish along with 1/4 cup of the cold milk. (This will cool the pasta and prevent it from becoming gummy.)
Meanwhile, mix the cheeses together in a small bowl. Beat the eggs with 1/4 cup of the milk in a medium bowl.
Add the scallions, bread and half of the cheese to the egg mixture; set aside.
Cook the bacon in a large skillet over medium heat until crisp; transfer to paper towels to drain. Discard all but 2 tablespoons drippings from the pan.
Add the onion and garlic; cook, stirring, until just brown, about 4 minutes. Stir in the flour, cayenne pepper and 1 teaspoon salt; cook for 2 minutes. Slowly add the remaining 1 3/4 cups milk and 3/4 cup water to the skillet. Bring to a boil, whisking until thick.
Remove the sauce from the heat and whisk to cool slightly.
Whisk in the remaining cheese.
Add the sauce to the macaroni; stir to combine.
Crumble up the bacon and add it to the egg/bread mixture.
Spread evenly over the pasta.
Place the casserole dish on a baking sheet and bake until golden brown, about 35 to 40 minutes.
Remove from the oven; let sit 5 minutes before serving.