Heat a large skillet over medium-low heat. Add the pancetta and cook until cooked through and just slightly crispy, 5 to 7 minutes. Transfer to a plate lined with a paper towel and reserve. Add the onions to the skillet and saute over medium heat until soft and translucent, about 8 minutes. Set aside.
Bring a large pot of salted water to a boil. Add the macaroni and cook until al dente, 6 to 8 minutes. Drain and set aside.
Preheat the oven to 350 degrees F. Spray a 9-by-13-inch baking dish with nonstick cooking spray.
Melt the butter in a large saucepot over medium heat. Stir in the flour and cook, stirring constantly, until lightly browned with a nutty aroma, about 5 minutes. Add the reserved onions and the garlic and cook for 2 minutes. While whisking, slow pour in the milk, making sure to whisk out any lumps. Stir in the white pepper, cayenne and 1 teaspoon salt and bring to a simmer over medium heat. Reduce the heat and let simmer, stirring occasionally, until thickened, 3 to 4 minutes. While stirring, add the grated fontina, Gruyere and Parmesan about 1/2 cup at a time and continue to stir until melted and blended. Stir in the celery leaves. Stir in the cooked macaroni.
Pour the mixture into the prepared baking dish. Bake until hot, bubbly and lightly browned on top, 20 to 25 minutes, sprinkling on the cooked pancetta about 5 minutes before the macaroni and cheese is done.