Cook the pasta in a large pot of well-salted boiling water, according to the package directions. Drain.
While you’re waiting for the pasta water to boil, cook the bacon in a large skillet or Dutch oven over medium heat until crisp, about 6-8 minutes. Use a slotted spoon to remove the bacon to a paper towel-lined plate, reserving 1 tablespoon of drippings in the pan.
Add the zucchini and onion to the bacon drippings in the skillet. Cook until the vegetables are soft, about 5-7 minutes. Remove the zucchini and onions to the plate with the bacon.
Without washing the skillet or Dutch oven, add the butter to the pan and melt over medium heat. Sprinkle in the flour and whisk constantly for 2 minutes as the mixture bubbles and turns a light golden color.
Gradually add the milk, whisking constantly. Increase the heat to medium-high and bring the mixture to a simmer, whisking frequently. Simmer for 3 minutes.
Remove the sauce from the heat. Stir in the cheeses, salt, garlic powder, and pepper. Whisk until the cheese melts smoothly into the sauce.
Add the cooked pasta, bacon, zucchini, and onion to the cheese sauce. Stir well until everything is coated in the sauce. Taste and season with additional salt and pepper, if necessary. Garnish with fresh lemon zest, chopped fresh herbs, and crushed red pepper flakes.