01 -
Start by dropping butter and olive oil in a medium-sized pan over medium heat. Toss in onion slices and give them a good stir to cover with the fat. Every few minutes, give the onions a swirl and cook until they turn really brown and sweet, which can take about 40–50 minutes. Turn the heat down if they're getting dark too quick. Move the onions out and set them aside when they're done.
02 -
Chop bacon strips into three for faster cooking. Place them in a big skillet with high sides, low heat, and take your time flipping until super crispy. Move the bacon to a plate with paper towels to soak up grease. Keep about 4 tablespoons of the bacon fat for later—if you need more, just add butter.
03 -
Boil a huge pot of salted water. Throw in the shells and cook like it says on the pack, just to al dente. Drain it all and place aside.
04 -
In the same bacon pan, pour in saved bacon fat and set it over medium heat. Whisk in flour and stir for around 2 minutes—you're making your thickener, called a roux. Bit by bit, whisk in heavy cream, then milk, making sure it doesn't get lumpy. Drop in the mustard powder, thyme, garlic powder, and a squirt of hot sauce. Let things bubble a bit, drop to a simmer after that.
05 -
Turn the heat super low so your sauce cools a little—don't dump in cheese while it's piping hot. Slowly toss in Gruyere, cheddar, and Parmesan, stirring lots to keep it smooth. Fold in the caramelized onions and drained pasta. Use a silicone spatula and mix it all up gently until everything looks combined.
06 -
Cut the cooked bacon into big chunks and sprinkle over the pasta-cheese mix. Mix some of bacon in and if you want, save a bit for the top. Sprinkle with chopped parsley and get it on the table hot.