Preheat oven to 400 degrees F. Butter a 9x13-inch casserole dish. Heat a large pot of water over high heat for the pasta; cover.
In a 12-inch cast iron skillet (or other heavy, stainless skillet), fry the bacon until crisp. Remove the bacon to a towel-lined plate to drain. Pour off all but 2 tablespoons of the bacon grease.
Adjust the heat to medium-low and add the butternut squash and onion to the bacon grease. Cook, stirring occasionally, until the squash and onion are browned and cooked through. Once cooked, use the back of a wooden spoon to mash up the mixture (it doesn't have to be completely smooth - leave some chunks in for texture).
Add the pasta to the boiling water and cook the pasta according to the box directions for al dente pasta (if your box doesn't specify al dente, cook it for 1 to 2 minutes shorter than the time called for - it shouldn't be cooked the whole way through). When the pasta is finished cooking, drain it in a colander.
While the pasta is cooking, make the sauce. In a large saucepan, melt 4 tablespoons of the butter over medium heat. Once the butter has melted, whisk in the flour and cook for about 1 minute, until the flour starts to brown a bit and smells nutty, whisking constantly. In a slow, steady stream, whisk in the milk. Allow the sauce to come to a simmer.
Once the sauce comes to a simmer, stir in 6 ounces each of the Gruyere and cheddar cheeses, adding a handful at a time and stirring with a wooden spoon until completely melted before adding the next handful. Season with salt and pepper and turn off the heat.
Add the cooked, drained pasta, bacon and butternut squash mixture to the sauce. Stir with a wooden spoon until everything is completely combined and evenly distributed. Pour the mixture into the prepared casserole dish.
Melt the remaining 4 tablespoons butter. In a small bowl, mix the melted butter with the breadcrumbs.
Sprinkle the macaroni and cheese with the remaining shredded cheeses. Sprinkle the breadcrumb mixture on top of the cheese.
Bake until browned and bubbly, about 15 to 20 minutes. Allow to sit for 10 to 15 minutes before serving.