01 - Preheat oven to 350°F. Heat olive oil in a large skillet over medium heat. Add onion and cook 3 minutes until softened. Stir in garlic and cook 1 minute.
02 - Add ground beef, breaking up with a spoon. Cook 5 minutes until browned. Drain excess fat if necessary.
03 - Stir in crushed tomatoes, tomato paste, oregano, basil, salt, pepper, and beef stock. Simmer, uncovered, 15 to 20 minutes, stirring occasionally, until thickened. Set aside.
04 - Melt butter in a saucepan over medium heat. Whisk in flour constantly for 2 minutes to form a roux without browning.
05 - Gradually whisk in warm milk, avoiding lumps. Cook, stirring, until sauce thickens and coats back of spoon, about 6 to 8 minutes. Remove from heat and stir in nutmeg, salt, white pepper, and Parmesan until smooth.
06 - Spread a thin layer of meat sauce in a 9x13 inch baking dish. Layer noodles over sauce, breaking to fit if needed. Spread one-third of remaining meat sauce and one-quarter of white sauce over noodles. Sprinkle with mozzarella cheese.
07 - Repeat the noodle, meat sauce, white sauce, and mozzarella layers two more times. Finish with a final noodle layer topped with white sauce, remaining mozzarella, and Parmesan cheese.
08 - Cover with aluminum foil and bake for 30 minutes.
09 - Remove foil and bake 15 to 20 minutes more until bubbly and golden brown.
10 - Allow to rest at least 15 minutes before slicing. Garnish with fresh basil leaves if desired.