01 -
Heat butter and olive oil in a medium skillet over medium heat. Add onion slices, tossing to coat evenly. Cook, stirring every few minutes, until deeply golden and caramelized, about 40–50 minutes. Lower heat if onions brown too quickly. Once caramelized, remove onions and set aside.
02 -
Slice bacon strips into thirds for even cooking. Place bacon in a large, high-sided skillet over low heat. Cook slowly, flipping as needed, until evenly crispy. Transfer bacon to a plate lined with paper towels. Reserve 4 tablespoons of bacon fat; supplement with unsalted butter if necessary.
03 -
Bring a large pot of salted water to a boil. Add pasta shells and cook until just al dente according to package instructions. Drain and set aside.
04 -
In the bacon skillet, heat reserved bacon drippings over medium heat. Whisk in flour, stirring constantly for 2 minutes to form a roux. Gradually add heavy cream while whisking, followed by milk in small increments, ensuring the mixture remains smooth. Stir in mustard powder, dried thyme, garlic powder, and hot sauce. Bring to a light boil, then reduce heat to a simmer.
05 -
Reduce heat to low, allowing sauce to cool slightly before adding cheese. Gradually add Gruyere, cheddar, and Parmesan, stirring thoroughly after each addition to prevent separation. Fold in caramelized onions and drained pasta, mixing gently with a silicone spatula until evenly combined.
06 -
Roughly chop cooked bacon and sprinkle over the pasta and cheese mixture. Stir some bacon into the dish, reserving a portion for garnish if desired. Garnish with chopped parsley and serve immediately.