From BuddyPress Real Names, http://wordpress.org/extend/plugins/buddypress-real-names/
how to filter members alphabetically using another field that the default one (Name) or multiple field.

##

//add filter on the members query
add_action( 'bp_pre_user_query', filter_query_members_alphabetical');

        function filter_query_members_alphabetical($query){
            global $bp;
            
            //check this is an alphabetical search
            if($query->query_vars['type']!='alphabetical') return $query;

            //get fields ids used to sort the members
            $fields_ids=array(...); // array of ids, eg. array(1,2,3,4);
            
            if(!$fields_ids) return $query;

            
            if(count($fields_ids)==1){//ORDER USING UNIQUE FIELD

                
                if ($fields_ids[0]==1) return $query;//default field - acts like core, escape filter
                
                $clauses['select']  = "SELECT DISTINCT u.user_id as id FROM {$bp->profile->table_name_data} u";
                $clauses['where'][] = "u.field_id = {$fields_ids[0]}";
                $clauses['where'][] = "u.value IS NOT NULL";
                $clauses['orderby'] = "ORDER BY u.value";
            
                
            }else{ //ORDER USING MULTIPLE FIELDS
                
                $select[]="SELECT u.user_id as id";

                //emulate fields
                foreach((array)$fields_ids as $field_id){
                    $dummy_name = 'dummy_field_'.$field_id;
                    $select_max[]="MAX(CASE WHEN field_id = {$field_id} THEN value ELSE null END) AS {$dummy_name}";
                    //check the field is not empty
                    $having[]="{$dummy_name} IS NOT NULL";
                    $orderby[]=$dummy_name;
                }

                if($select_max)$select[]=', '.implode(', ',$select_max);
                $select[]="FROM {$bp->profile->table_name_data} u";
                $select[]="GROUP BY u.user_id";
                
                
                if($having)$select[]="HAVING ".implode(" AND ",$having);


                $clauses['select']=implode(" ",$select);


                if($orderby)$clauses['orderby'] ="ORDER BY ".implode(',',$orderby);
                
            }
            
            $clauses['where']   = ! empty( $clauses['where'] ) ? 'WHERE ' . implode( ' AND ', $clauses['where'] ) : '';
  
            $query->uid_clauses = wp_parse_args($clauses,$query->uid_clauses);

            return $query;
        }