Cook the macaroni per the package (not overcooked) and put it in a mixing bowl.
Melt the butter in a saucepan and cook the onion and garlic gently until soft. Add the flour to make a roux and cook about 2 minutes without browning.
Add the half-and-half, egg, cayenne, mustard, and salt and pepper to taste and simmer until it starts to thicken. Stir in the cheeses over low heat until melted into a sauce.
Pour over the macaroni and stir to combine. Spread in a buttered baking dish and top with extra cheddar, bread crumbs and paprika.
Bake in a preheated 350 oven for 25 minutes, then let rest.