Searching the same issue and found this year old thread. Coming from a sql server database perspective this workaround below worked for me. Basically provide a virtual unique value from your query for your grid to groupby and sort..but display a group name in the select (sql order by in the sql is ignored going to grid but left for you to observe the results). The key here is the row_number() function that assign a value per record while sorting.
-- sql server,database query, GroupSequence = unique group or sequence ID given at query time
select g.GroupSequence, g.GroupName, sp.SalesPersonID, sp.FirstName, sp.EmailAddress
from dbo.SalesPersons sp
inner join (select row_number() over(order by Sequence, [Description], SalesGroupID) as GroupSequence, SalesGroupID, Description as GroupName from dbo.SalesGroups) g on g.SalesGroupID = sp.SalesGroupID
order by GroupSequence, FirstName
<telerik:GridGroupByExpression>
<SelectFields>
<telerik:GridGroupByField FieldName="GroupName"></telerik:GridGroupByField>
</SelectFields>
<GroupByFields>
<telerik:GridGroupByField FieldName="GroupSequence"></telerik:GridGroupByField>
</GroupByFields>
</telerik:GridGroupByExpression>