Bring a large pot of water to a boil for the pasta, salt and water, and cook the pasta to al dente.
While the pasta water comes to a boil, place a medium pot over medium-low heat with olive oil and butter. Add the onions and garlic to the pan and cook until very soft, about 10 minutes.
Heat the broiler and position the rack in the middle of the oven.
Turn up the heat under the pot to medium-high and sprinkle the flour into the pot. Cook for about 1 minute, then whisk in the wine and cook another minute to burn off the alcohol. Whisk the milk into the pan and bring to a bubble. Add the nutmeg, artichokes, spinach, and salt and pepper to the sauce and simmer until thickened and the vegetables are warmed through, about 2-3 minutes more. Add 1 cup each of the cheeses to the sauce and stir until melted.
Toss the prepared sauce with the cooked pasta and transfer to a casserole dish. Sprinkle the remaining cheeses over top and brown under the broiler for about 3 minutes