There is a good solution to this problem in the new IQueryFilterDefinition2 interface in 10.1. I can confirm that this works for file geodatabases and performs well.
IQueryFilter2 query = new QueryFilterClass();
query.WhereClause = whereClause;
query.SubFields = distinctColumn;
IQueryFilterDefinition2 queryDef = (IQueryFilterDefinition2)query;
string prefixTemplate = "DISTINCT {0}";
queryDef.PrefixClause = String.Format(prefixTemplate, distinctColumn);
string postfixTemplate = "ORDER BY {0}";
queryDef.PostfixClause = String.Format(postfixTemplate, distinctColumn);
This code sample doesn't quite work for me when I covert it to VB .NET. The problem is with these lines:
string prefixTemplate = "DISTINCT {0}";
queryDef.PrefixClause = String.Format(prefixTemplate, distinctColumn);
It puts the unique field name after the distinct clause, but that field name is already being fed in the SQL statement being run by the SubFields setting. Setting the prefix to just "DISTINCT" seems to work.