Preheat the oven to 375°F.
Bring a large pot of salted water to a boil and cook the pasta according to package instructions until al dente.
While the pasta is cooking, heat the olive oil in a large skillet over medium heat.
Add the chopped onion and cook until translucent, about 5 minutes.
Add the ground beef to the skillet and cook until browned and cooked through, breaking it up with a spoon as it cooks.
Add the tomato sauce to the skillet and season with salt and pepper to taste.
In a separate saucepan, melt the butter over medium heat.
Add the flour to the melted butter and whisk it together to form a roux.
Slowly add the milk to the roux, whisking constantly to prevent lumps from forming.
Continue to cook the bechamel sauce until it thickens, about 5-7 minutes.
When the pasta is done cooking, drain it and toss it with the Parmesan cheese.
Add the pasta to the skillet with the meat sauce and stir to combine.
Grease a large baking dish and add the pasta and meat sauce mixture to it.
Pour the bechamel sauce over the pasta and meat sauce mixture, spreading it evenly.
Sprinkle the grated mozzarella cheese on top of the bechamel sauce.
Bake the pasta al forno in the preheated oven for 30-40 minutes, or until the cheese is melted and bubbly and the pasta is hot and cooked through.
Let the pasta al forno cool for a few minutes before serving.