Bring a large pot of salted water to boil. Add the macaroni and cook at a boil until just al dente.
Drain, rinse in cold water and set aside.
Cut the proscuitto in thin strips. Cut the spinach into thin strips.
In a food processor or with chopper, mince the onion and garlic until very fine and smooth.
In a large skillet or pan, melt 1 Tbsp. of butter and add the proscuitto and cook until crisp, approx. 5 min.
Remove from pan and place on a paper towel, set aside.
Add the remaining butter and melt, add the onion and garlic and cook for 5 min. until slightly browned.
Add the flour and stir and cook for 3-4 min. Add the milk milk gradually and whisk.
Add the white wine and chicken stock and continue to stir until the mixture starts to thicken but is very smooth. It will just start to coat the back of a wooden spoon.
Add the mozzarella while stirring. It may appear stringy but will mix with the pasta later.
Adjust seasoning with salt and pepper.
Stir in the pasta, proscuitto and spinach.
Butter a 9x13" baking dish or 8 small ramekins to make individual portions
Add the macaroni mixture and sprinkle with the chopped walnuts.
(Wrap and refrigerate is you want at this point).
Bake at 350F for 20 min. if made right away if chilled in the fridge bake for 30 min. with foil covering.
Place under the broiler if desired to brown and serve immediately.