Heat 3 tablespoons of butter in a 2-qt. saucepan over medium-high heat. Add the flour and cook, whisking, until smooth, for about 1 minute. Whisk in the milk, and bring to a boil; reduce heat to medium-low and let simmer until slightly reduced and thickened, for about 6–8 minutes. Add ½ cup grated Gruyère and the Parmesan, and whisk until smooth. Season with the salt, pepper, and nutmeg.
Heat broiler to high. Place the waffles in a cast iron skillet or on a parchment paper-lined baking sheet, and spread 1 tbsp. mustard over each. Top with 2-3 slices of ham and the remaining Gruyère. Broil until the cheese begins to melt, for about 1-2 minutes. Then, remove from oven, pour a generous amount of béchamel on top and return to broil until cheese sauce is bubbling and evenly browned, about 3–4 minutes (watch it so it does not burn).
Meanwhile, heat the remaining 2 tablespoons of butter in a 12″ nonstick skillet over medium heat. Add the eggs (only 2 at a time), season with salt and pepper if desired, and cook until whites are cooked but yolks are still runny. After a minute or 2, add about a tablespoon of water and cover with lid to evenly cook the eggs, for about 2 minutes. When finished, place the egg/s on top of each waffle, garnish with salt and pepper, more freshly grated parmesan and the green onions. Enjoy immediately.