Preheat your oven to 375°F (190°C). Grease a 9x13 inch baking dish with cooking spray.
Bring a large pot of salted water to a boil. Cook the elbow macaroni according to package instructions for al dente (usually 1-2 minutes less than the recommended time). Drain and set aside.
While the pasta cooks, heat olive oil in a large skillet over medium-high heat. Add the ground beef and cook until browned, breaking it apart with a spoon. Drain excess fat if necessary.
Add the chopped onion to the beef and sauté for 3-4 minutes until softened. Stir in the minced garlic, oregano, and basil, cooking for another minute until fragrant.
Pour in the marinara sauce and crushed tomatoes. Simmer the meat sauce on low heat for 5-10 minutes to meld flavors. Season with salt and pepper to taste. Remove from heat.
In a separate saucepan, melt the butter over medium heat. Whisk in the flour and cook for 1-2 minutes to form a light roux, stirring constantly.
Gradually pour in the milk while whisking vigorously to prevent lumps. Simmer for 3-5 minutes until the white sauce thickens enough to coat the back of a spoon.
Remove the white sauce from heat and stir in 1 cup of the shredded mozzarella and all of the parmesan cheese until smooth and melted.
To assemble, spread a thin layer of meat sauce on the bottom of the prepared baking dish.
Layer half of the cooked macaroni over the sauce. Pour half of the white cheese sauce over the macaroni, followed by half of the remaining meat sauce.
Repeat the layers: remaining macaroni, remaining white sauce, and remaining meat sauce. Top firmly with the remaining 2 cups of shredded mozzarella cheese.
Bake uncovered for 20-25 minutes, or until the cheese is melted, bubbly, and slightly golden brown on top.
Let the Macaroni Lasagna rest for 10 minutes before slicing. Garnish with fresh parsley and serve warm with garlic bread, salad, and corn on the cob.