Hola
Pues si debe haber alguna manera de hacer lo que quieres, seria cuestión de hacer algunas pruebas, me parece que tendrias que utilizar el evento OnDrawColumnCell del DBGrid, que es llamado cada que se dibuja una celda, en el puedes calcular el largo de las cadenas y asigmarselo a la propiedad Width de la columna, para saber el largo del texto en el canvas hay una función llamada TextWidth
Código:
Ancho:=Canvas.TextWidth(Column.Field.DisplayText);
Tal vez estoy mal es cuestión de probar, luego nos cuentas como te fue.
Saludos