Cook the Bacon: In a large skillet, cook the bacon over medium heat until it’s crispy. Remove the bacon and place it on a paper towel to cool, then crumble it. Reserve about ¼ cup of bacon drippings in the skillet (or use butter to make up the difference if needed).
Cook the Pasta: In a large pot of salted water, cook the pasta shells until al dente according to package instructions. Drain and set aside.
Make the Roux: In the skillet with bacon drippings (or butter), whisk in the flour over medium heat and cook for 1-2 minutes, until it forms a paste.
Make the Cheese Sauce: Slowly whisk in the heavy cream and milk to the roux, stirring constantly to avoid lumps. Once smooth, add the mustard powder, thyme, garlic powder, and hot sauce (if using). Simmer the mixture until the sauce reaches a thicker consistency, which should take approximately 5 minutes.
Add Cheese: Turn the heat down to low and slowly stir in the shredded Gruyere, Cheddar, and Parmesan cheeses until fully melted and the sauce is smooth.
Combine: Stir the cooked pasta into the cheese sauce until well-coated. Add the crumbled bacon (and caramelized onions if using) and gently mix to combine.
Serve: Serve the bacon mac and cheese hot, optionally garnished with extra bacon or parsley.