Melt the butter in a medium saucepan. Whisk in the flour, then gradually whisk in the hot milk. Cook, whisking constantly, until the sauce is smooth and thickened. Stir in the salt, remove from heat and let cool. When the sauce is lukewarm, whisk in the eggs. Set aside.
Main dish
Melt the butter in a large skillet. Add the onions and sauté until softened and golden. Crumble the minced beef into the skillet and cook with the onions until browned. Stir in the cinnamon, salt, and pepper. Stir in the water and tomato paste; simmer for 5 minutes. Set aside.
Cook ziti according to the instructions on the package. Drain and rinse with cool water. Once the pasta has cooled down, stir in the beaten eggs and the salt.
Preheat your oven to 175°C. Grease a deep 23x33 cm casserole dish with non-stick spray. (You really need a deep casserole dish for this recipe, deeper than the usual 23x33 cm Pyrex).
Scoop half of the pasta into the bottom of your prepared dish. Sprinkle generously with cheese. Spoon on the meat mixture to create an even layer; sprinkle with another layer of cheese. Scoop the remaining pasta on top of the meat and sprinkle with more cheese. Top with the cream sauce and sprinkle with the remaining cheese.
Bake for 45 minutes, or until the sauce is bubbly and golden on top. Let sit at room temperature for at least 20 minutes before serving (you can even refrigerate it to let the layers set, and then warm up later to serve).
Notes
If you cannot get ziti, you may use:
Penne: This is a good alternative, as it's also a tube-shaped pasta.
Rigatoni: Slightly larger but holds up well in baked dishes.
And if you cannot get kasseri or kefalotiri:
Parmesan: Has a similarly strong flavour but is less melty. You could use it in a combination with a more meltable cheese like mozzarella.
Gruyère: It's nutty and a bit sweet, melts well, and could mimic the texture and mouthfeel of kasseri or kefalotiri.
Pecorino Romano: Strong and salty, though more crumbly. Mix it with a soft cheese like mozzarella for better texture.
Pro tip: When using substitutes for cheese, you could mix two types to balance out flavour and texture. For example, combining parmesan and mozzarella can give you the strong flavour of parmesan and the melty, stringy texture of mozzarella.