Preheat oven to 350°F and lightly grease a 9x13" baking dish with nonstick cooking spray.
Bring a large pot of salted water to a boil. Add pasta and cook according to the package instructions until one minute less than al dente, about 10 minutes. Reserve ½ cup of the starchy pasta water and then drain the pasta and set it aside.
While pasta is cooking, add pulled pork to a medium bowl and pour bbq sauce over the top. Fold to combine. Set aside.
In a medium bowl, combine the gouda, cheddar, and fontina. Set aside.
Add olive oil and red onion to a large skillet set over medium heat. Saute for 3-4 minutes, or until red onion is just tender.
Add butter to red onion. Once butter has melted, stir in garlic and cook for 1 minute.
Sprinkle flour over onion and garlic, and stir it in to create a roux. Cook the roux for 1 minute, stirring constantly.
Slowly pour in milk, whisking continuously until no lumps remain. Cook the sauce over medium heat for 5-7 minutes, or until it is bubbling and slightly thickened.
Reduce heat to low, then slowly stir in ¾ of the shredded cheese mixture (reserve the rest for sprinkling over the top before it’s baked). Add salt, pepper, and paprika, and continue stirring until cheese has fully melted.
Add cooked cavatappi to the cheese sauce and stir to combine. If cheese sauce is too thick or doesn’t cover the pasta evenly, add a small splash of the reserved pasta water. Continue adding small splashes, until the sauce is very creamy and evenly coats the pasta. I usually add about ¼ cup.
Transfer half of the mac and cheese to the greased baking dish, then top it with half of the pulled pork and half of the green onions.
Top with the remaining mac and cheese, the remaining pulled pork, and the remaining shredded cheese.
Bake for 15-20 minutes, or until cheese is bubbly and the top is starting to brown.
Remove from the oven and garnish with the remaining sliced green onions. Serve hot.
