Heat a large skillet over medium-high heat. Add ground beef and Italian sausage, breaking up with a wooden spoon, and cook for 8–10 minutes until no pink remains. Drain excess fat, leaving about 1 tablespoon.
Add diced onion to the skillet and cook 4–5 minutes until softened, then stir in garlic for 1 minute. Add crushed tomatoes, tomato sauce, tomato paste, and all seasonings; simmer on low for 15–20 minutes until flavors meld.
In a medium bowl, stir together ricotta, egg, and parsley until smooth. Fold in 1 cup of the mozzarella and ½ cup of the Parmesan; set aside.
Preheat oven to 375°F (190°C) and grease a 9×13-inch baking dish. Spread about 1 cup of meat sauce evenly across the bottom.
Lay 4 no-boil noodles over the sauce (slightly overlapping if needed), spread one-third of the ricotta mixture on top, add 1½ cups meat sauce, then sprinkle with 1 cup mozzarella.
Repeat with 4 more noodles, another third of the ricotta mixture, 1½ cups meat sauce, and 1 cup mozzarella.
Top with the remaining 4 noodles, last third of ricotta, remaining meat sauce, 2 cups mozzarella, and ½ cup Parmesan, ensuring all noodles are fully covered.
Cover the dish tightly with foil (sprayed with cooking spray to prevent sticking) and bake on the middle rack for 45 minutes.
Remove foil carefully and bake 15 more minutes until cheese is bubbly and golden; broil 2–3 minutes for a deeper crust if desired.
Let the lasagna rest for 15–20 minutes before slicing — this allows the layers to set for clean, neat portions. Garnish with fresh parsley or basil if desired.