Preheat the oven to 300 degrees F (150 degrees C). Butter a baking dish.
Place a steamer insert into a saucepan and fill with water to just below the bottom of the steamer. Bring water to a boil. Add cabbage and onion, cover, and steam until tender, 2 to 6 minutes. Add ham and steam for 1 minute. Transfer vegetables and ham to the prepared baking dish.
Melt 2 tablespoons butter in a skillet over low heat. Stir in flour until smooth. Add milk, stirring until smooth. Add cheese and salt; stir until cheese is melted. Pour cheese sauce over cabbage mixture in the baking dish. Sprinkle with bread crumbs and dot with remaining 2 tablespoons butter.