Cook the elbow macaroni according to package instructions until al dente. Drain and set aside.
In a large skillet, cook the chopped bacon over medium heat until crispy. Remove the bacon and drain on paper towels, leaving about 1 tablespoon of bacon grease in the skillet.
In the same skillet, melt the butter over medium heat. Add the flour and whisk continuously for about 1 minute to create a roux.
Gradually pour in the milk while whisking to avoid lumps. Continue to cook, stirring frequently, until the mixture thickens, about 5-7 minutes.
Reduce the heat to low and stir in the cheddar cheese, mozzarella cheese, garlic powder, onion powder, salt, and pepper. Mix until the cheese is melted and the sauce is smooth.
Add the cooked macaroni and crispy bacon to the cheese sauce, stirring until well combined.
If desired, preheat the oven to 350°F. Transfer the mac and cheese to a baking dish, top with breadcrumbs and Parmesan cheese, and bake for 15-20 minutes until golden and bubbly.
Serve hot and enjoy!