Cook the elbow macaroni according to package instructions until al dente. Drain and set aside.
In a large skillet over medium heat, cook the chopped bacon until crispy. Remove the bacon and drain on paper towels, leaving about 1 tablespoon of bacon grease in the skillet.
Add the butter to the skillet with the bacon grease and melt over medium heat. Stir in the flour and cook for about 1 minute, stirring constantly, until it forms a paste.
Gradually whisk in the whole milk, continuing to stir until the mixture thickens, about 3-5 minutes.
Reduce the heat to low and stir in the cheddar and mozzarella cheeses until melted and smooth. Add the garlic powder, onion powder, and season with salt and pepper to taste.
Combine the cooked macaroni with the cheese sauce and mix well. If using, toss the breadcrumbs with olive oil and sprinkle on top of the mac and cheese.
Transfer the mixture to a greased baking dish and bake at 350°F for 20-25 minutes, until bubbly and golden on top.
Let cool for a few minutes before serving.