You need persistent columns for the dbgrid. Either create persistent fields at designtime, or create columns after the dataset has been loaded. Then you have a property DBGrid1.Columns[index].Width which you can store in an ini or xml config file.
The reason why some columns are ultra-wide is in the field definition. When you declare a string field without size restriction the grid prepares for a very long string. Again, when you create columns at designtime or at runtime after loading the db you can immediately apply a more meaningful value.
See attached demo.