Here is how colid values get fragmented.
When you delete a column from a table, the corresponding record is deleted from syscolumns. When you later add a column to the same table, a new record is added to syscolumns with the new colid value (for some reason, the old one is not reused).
As far as how to solve it, I am still looking for a solution.
BR,
VG