Cook macaroni according to package directions, adding asparagus the last 2 minutes of cooking. Drain and set aside.
Heat butter in a very large skillet over medium heat. Add ham; cook about 4 minutes or until ham begins to brown, stirring occasionally. Add onion and garlic. Cook and stir for 3 minutes more. Add flour to skillet; stir to coat ingredients well. Add the milk all at once. Cook and stir until thickened and bubbly. Cook and stir 1 minute more. Stir in macaroni mixture, 2 tablespoons Parmesan, and lemon peel; heat through. Top with fresh dill, additional Parmesan cheese, and paprika, if desired.