01 - Preheat oven to 350°F.
02 - Heat olive oil in a large skillet over medium heat. Add onion and cook until translucent, about 5 minutes. Add garlic and cook for 1 minute.
03 - Add ground beef to the skillet. Cook, breaking it up with a spoon, until browned completely.
04 - Stir in crushed tomatoes, tomato paste, oregano, basil, salt, pepper, sugar, and water. Simmer uncovered for 20–25 minutes, stirring occasionally, until sauce thickens.
05 - Melt butter in a saucepan over medium heat. Whisk in flour and cook for 1–2 minutes, stirring constantly to prevent browning.
06 - Gradually add warmed milk while whisking continuously to prevent lumps from forming.
07 - Cook the sauce, stirring constantly, for 5–7 minutes until it thickens enough to coat the back of a spoon. Stir in nutmeg, salt, and white pepper. Remove from heat.
08 - Cook lasagna noodles according to package directions if not using no-boil noodles. Drain well and set aside.
09 - Spread a thin layer of meat sauce in the bottom of a 9x13 inch baking dish. Arrange a single layer of noodles over the sauce, trimming to fit if necessary.
10 - Top noodles with ⅓ of the meat sauce, spreading evenly. Add ⅓ of the béchamel sauce and sprinkle with a portion of mozzarella and Parmesan cheeses.
11 - Repeat the layering process twice more with noodles, meat sauce, béchamel, and cheeses. Finish with the remaining béchamel and a generous layer of mozzarella and Parmesan on top.
12 - Cover the baking dish tightly with aluminum foil. Bake for 30 minutes.
13 - Remove the foil and bake for an additional 15–20 minutes until the cheese is golden brown and sauce is bubbling around the edges.
14 - Let the lasagna stand for 15 minutes before slicing and serving to allow layers to set.