Make the roux: Melt the butter in a large, shallow oven-safe skillet or enameled cast-iron pan over medium heat. Stir in the flour and cook for about 2 minutes, stirring frequently, until lightly golden and the raw flour smell disappears.
Cook the pasta: While the roux cooks, bring a large pot of generously salted water to a boil. Add the pasta and cook until just under al dente, leaving a little bite in the center. Reserve 1 cup of pasta water, then drain.
Build the sauce: Slowly stir the evaporated milk into the roux until smooth. Whisk if needed to remove any lumps. Add the onion powder, garlic powder, minced garlic, kosher salt, and black pepper.
Thicken the sauce: Cook for about 3 minutes, stirring occasionally, until the sauce begins to thicken.
Add the cheese: Stir in all but about two handfuls of the shredded mozzarella, Monterey Jack, and Parmesan. Continue stirring until the cheese is almost completely melted.
Add the vegetables: Fold in the drained spinach and marinated artichoke hearts. The remaining artichoke marinade can be added with the hearts for extra flavor.
Combine: Add the cooked pasta and stir until every piece is coated in the creamy sauce. If the mixture seems too thick, add a splash of reserved pasta water until it reaches your preferred consistency.
Bake and broil: Sprinkle the reserved cheese evenly over the top. Place the pan under a preheated broiler for 4–6 minutes, watching closely, until the cheese is melted, bubbling, and lightly golden.
Serve: Let the Spinach Artichoke Mac and Cheese rest for a couple of minutes, then serve hot.