Warm the oil in a large skillet over medium heat. Add the onion and cook until soft, 5 minutes. Add the garlic and cook for 1 minute. Add the ground meat and while breaking it up with a spoon, cook until no longer pink, 4 minutes. Add the tomatoes, oregano, cinnamon, and 1 teaspoon of the salt and bring the mixture to a boil over high heat. Reduce the heat to low and simmer until the flavors blend, 15 to 20 minutes, occasionally mashing the tomatoes with a spatula or the flat side of a wooden spoon. Remove the pan of sauce from the heat and set it aside.
Meanwhile, melt the butter in a medium saucepan over medium heat. Add the flour and cook, whisking, for 2 to 3 minutes. Whisk in ½ cup of the milk until smooth. Gradually whisk in the remaining 2½ cups of milk until smooth. Bring the mixture to a boil over medium-high heat and whisk until lightly thickened, 1 minute. Whisk in the remaining 1 teaspoon of salt. Remove the pan of sauce from the heat and whisk in the eggs and ½ cup of the feta.
While the sauces are simmering, cook the pasta according to the package directions but until slightly underdone.
Heat the oven to 350ºF. Coat a 13-by-9-inch or other shallow 3-quart baking dish with cooking spray. Drain the pasta and mix half into the tomato sauce and half into the white sauce. Spoon the tomato-sauced pasta into the prepared dish. Spoon the white-sauced pasta over the top, spreading it evenly. Scatter on the remaining ½ cup of feta. Bake until golden and bubbly, 30 to 40 minutes. Let the ziti stand for 5 minutes before cutting it.
Tip: The tomato sauce can be made ahead and refrigerated for up to two days. Just reheat it before using. You can also freeze the cooked casserole for weeks and reheat the whole dish in a 325ºF oven.