5 pounds russet or Idaho (in other words, not red or new) potatoes
1 medium onion, finely chopped
1 1/3 pounds ham, cut into 1/2-inch cubes
8 slices bacon (not thick-cut), cut into squares
½ cup (1 stick) unsalted butter
2 tablespoons garlic salt
½ teaspoon freshly ground black pepper
1½ cups flour
5½ cups whole milk
Preheat the oven to 375°F. Peel the potatoes, halve them lengthwise and slice them crosswise into thin half-moons. Rinse well with cold water and drain in a colander. Transfer the potatoes to a large bowl and toss them with the onion and the ham.
In a large Dutch oven, cook half the bacon over medium-low heat until the fat is rendered and the bacon is crispy, 9-10 minutes. Add the butter and cook, stirring, until melted, making sure the butter doesn’t’ burn. Add the garlic salt and the pepper, then whisk in the flour and cook, stirring and working out the lumps, until smooth. Whisk in the milk until smooth. Increase the heat to high to bring to a boil. Cook, whisking, until thickened, about 5 minutes. Transfer the sauce to a bowl.
Arrange half the potato mixture in the bottom of the Dutch oven, then cover it with half the sauce. Repeat with the remaining potatoes and sauce. Arrange the uncooked bacon squares on top of the sauce and bake, uncovered, until the bacon appears crispy and rendered, 30-35 minutes. Reduce the oven temperature to 350°F, cover with lid, and cook until bubbling, 90 minutes longer.
Remove from the oven and place on a trivet, remove the lid, and allow to cool a bit before serving.