The below code comes from a current project of mine. I've made it more generic for your purposes, so it's untested. You'd need to modify the query depending on your usage - it's going to throw errors if you use as-is.
<?php
// Add this to a custom module, replace "mymodule" with your module name
function mymodule_form_views_exposed_form_alter(&$form, &$form_state) {
//dsm($form); // Display available form vars
$field_id = 'id_assigned_in_views'; // Change for the field ID in question.
// Only alter forms with the necessary field.
if (isset($form[$field_id])) {
// Do your entity_field_query or db_query here
$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'taxonomy_term')
->entityCondition('bundle', array('tags'))
->propertyOrderBy('weight');
$result = $query->execute();
$terms = $result['taxonomy_term'];
// Add a default so the filter is optional.
$options = array('' => t('- All -'));
foreach($terms as $tid=>$term) {
//dpm($term);
$options[$tid] = $term->name;
}
// Alter the field.
$form[$field_id]['#type'] = 'select';
$form[$field_id]['#options'] = $options;
$form[$field_id]['#size'] = 1;
}
}
?>