Bring a large pot of salted water to a boil and cook the lasagna noodles until al dente, then drain and set aside.
Heat olive oil in a skillet over medium heat, add the chopped onion, and sauté until translucent and fragrant, about 5 minutes.
Add minced garlic to the skillet and cook for 30 seconds until fragrant, then stir in ground beef, breaking it apart with a spoon, and cook until browned and cooked through, about 8 minutes.
Stir in crushed tomatoes, season with salt and pepper, and simmer the sauce for 15 minutes to develop flavor.
Meanwhile, prepare the béchamel sauce: melt butter in a saucepan over medium heat, whisk in the flour to form a smooth roux, and cook for 1-2 minutes.
Gradually whisk in milk, stirring constantly to prevent lumps, and cook until the sauce thickens and begins to bubble, about 5 minutes.
Remove béchamel from heat and stir in grated Parmesan, then season with salt and pepper to taste.
Preheat oven to 375°F (190°C). Spread a thin layer of meat sauce in the bottom of your baking dish, then layer pasta over it.
Spread a layer of béchamel over the pasta, then sprinkle with mozzarella cheese, followed by more meat sauce.
Repeat the layering process until all ingredients are used, ending with a top layer of béchamel and cheese.
Cover the assembled lasagna with aluminum foil and bake for 45 minutes, then remove foil and bake for an additional 15 minutes until bubbly and golden on top.
Let the lasagna rest for 10 minutes out of the oven so the layers set, then slice and serve warm, enjoying the rich textures and layered flavors.