Preheat oven to 400°F. Add bacon to parchment-lined sheet and bake for 20 minutes. Remove from oven and let cool before crumbling up.
To make breadcrumb topping, melt 2 tablespoon butter in small pan over low heat. Once melted, add panko, garlic and ½ cup Parmesan and toss to combine. Set aside.
In large saucepan or Dutch oven, melt ½ cup butter. Stir in flour and black pepper. Cook for about 1-2 minutes until well combined. Gradually add milk and cook until the mixture is smooth and bubbly, about 10 minutes. You'll want to stir constantly.
While making sauce, cook macaroni according to package and set aside.
Remove sauce from heat and gradually add gouda, cheddar cheese, ½ cup Parmesan cheese and the bacon. Stir in until cheese is melted. Add pasta and mix until everything is coated. Pour into a 9x13 greased baking dish. Top with breadcrumb mixture.
Put under broiler until the mixture bubbles and top is browned. Should be about 1 to 2 minutes. You can't leave unattended or it will burn. Remove from broiler and let rest for 5 minutes.
No overcooked pasta – cook the macaroni al dente according to the package instructions. The pasta will finish cooking in the oven while it’s in the sauce.
Freshly grated cheese – don’t use pre-shredded cheese. It doesn’t taste as good and also has addition ingredients that you don’t need.
Stir constantly – once the milk is added, you must stir constantly as it heats up and becomes thick. Otherwise you’ll have burnt milk on the bottom.
Lots of sauce – who likes a dry macaroni and cheese? At first when making this, you’ll think it is too much sauce but believe me - the macaroni soaks it all up.