Remove the stem and outer leaves from the cabbage, cut in wedges, then chop in bite-sized pieces. Rinse in a colander, then place in a large Dutch oven and add 3 inches of water. Cover and bring to a boil, then let the cabbage simmer, covered, until crisp-tender, about 8-10 minutes. Drain and rinse with cold water.
Cut the ham into bite-sized pieces and set aside.
Chop the onions and mince the garlic, then saute with the 2 tablespoons of butter in a large skillet until golden brown. Spoon into a bowl and set aside.
In the same skillet, melt 3½ tablespoons of butter and whisk in the flour. Cook over medium heat for a couple minutes, whisking constantly.
Whisk in the milk, then the chicken stock. Keep stirring until the gravy has thickened, then season with salt, pepper, dried thyme, and sage.
Stir the sauteed onion mixture and chopped ham into the gravy and heat through. Spoon the gravy into a large bowl and stir in the cabbage until it's well mixed.
Spread the filling evenly in a 6-cup (1.4 liter) capacity pie dish, and let it cool for a while before you put the pastry on top.