Heat the oil in a large pan over medium heat. Add the onions and cook until soft, stirring often, about 8 minutes. Add the pepper flakes, garlic, herbes de provence and 1 1/2 teaspoons of the four-spice powder. Add the lamb, raise the heat to medium high and let cook, breaking up any chunks, until browned, 5 to 8 minutes. Add the wine and simmer until reduced slightly. Add the tomatoes and season with salt and pepper. Lower the heat, cover and simmer until thick, about 45 minutes.
To make the bechamel sauce, bring the milk to a simmer in a medium pot set over medium heat. Melt the butter in a medium saute pan over medium heat. Whisk the flour into the butter and cook for 2 minutes. Whisk the warm milk into the flour mixture. Add the remaining 2 pinches four-spice powder and cook for 5 minutes at a simmer, whisking often, until thickened. Remove from the heat.
In a small bowl, whisk together the egg yolks. Whisking constantly, slowly pour a quarter of the milk mixture into the eggs. Whisk the egg mixture back into the pot. Whisk in 1 cup of the cheese. Fold in the yogurt. Season with salt and pepper.
Preheat the oven to 375 degrees F.
Bring a pot of salted water to a boil. Cook the pasta to al dente according to the package instructions. Drain and combine with the lamb sauce. Adjust the salt and pepper to taste.
Transfer to a large baking dish and top with the bechamel sauce and the remaining 1 cup cheese. Bake until the top is caramelized, about 45 minutes. Garnish with the parsley.