Preheat oven to 350 deg F. Lightly spray 9x13 pan with cooking spray.
In a large skillet, brown the ground beef over medium-high heat, breaking the meat apart into pieces with a wooden spoon. When cooked through, drain the grease and set aside.
In a medium-size saucepan over medium-high heat, add 2 tablespoons olive oil and one tablespoon butter. Add a pinch of salt and pepper. When oil/butter is hot, cook the mushrooms and onions until soft and brown and most of liquid has cooked out. Add garlic and cook for 30 seconds more. Remove from heat and either using a handheld immersion blender or transferring the vegetables to a blender, blend the vegetables to a paste-like mixture.
Return the pot to the heat (pour the pureed vegetables back in, if using a stand-alone blender) and add the tomato sauce and tomato paste. Stir to combine. Then add the diced tomatoes, Italian seasoning, salt and pepper. Stir. Cover and let the sauce sauce simmer for 30 minutes over medium-low heat, stirring occasionally. Right before using the tomato sauce in the lasagna, stir in the reserved ground beef.
While the tomato sauce is cooking, melt the 1/4 cup butter and when melted, add the flour, stirring constantly to combine and letting the mixture cook, while stirring, for a minute or two. Gradually add in the milk, whisking constantly. Add the salt and pepper. Slowly whisk the white sauce, ensuring it doesn’t burn on the bottom of the pan, while cooking it over medium heat. Continue slowly stirring or whisking while the white sauce cooks and thickens quite a bit, about 5-7 minutes.
While the tomato sauce simmers, if using lasagna noodles that need to be boiled, bring a large pot of salted water to a boil and boil the noodles for half the time suggested on the box. Once the noodles are cooked, drain, but do not rinse. Add a dab of olive oil to keep them from sticking together.
To begin layering the lasagna, keep in mind that you’ll have three layers of noodles as well as three layers of the sauces and cheese – so plan on splitting all the sauce and cheese piles into thirds so you don’t run out at the end!
On the bottom of your lightly greased baking pan, layer three pre-boiled noodles or four no-boil noodles, slightly overlapping the no-boil noodles. Layer the tomato sauce, white sauce, Parmesan and mozzarella cheeses, spreading all to the edges and top with another layer of noodles. Again, layer the tomato sauce, white sauce, Parmesan and mozzarella cheeses and top with the final layer of noodles. Layer the sauces and cheeses again.
Cover the lasagna with a greased layer of aluminum foil and bake for 45 minutes (or until bubbly). If cheese is still not bubbly, just broil for a couple minutes. after removing the foil. Let the lasagna sit for 15 minutes before cutting and serving.