You basically need to add WP rewrite rules to match the names of each of your users in the desired form. This is what the WP No Category Base does for categories, so most of the code in my answer is adapted from that plugin.
The primary part of the plugin is a function which hooks into the author_rewrite_rules
filter and replaces the author rewrite rules. This retrieves all the user names and adds a rewrite rule specifically for each user (the below won't handle feeds, so look at the WP No Category Base source if you need that).
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) {
global $wpdb;
$author_rewrite = array();
$authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");
foreach($authors as $author) {
$author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
$author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
}
return $author_rewrite;
}
The other key part of the plugin is a function which hooks into the author_link
filter and removes the 'author' base from the returned URL.
add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
$link_base = trailingslashit(get_option('home'));
$link = preg_replace("|^{$link_base}author/|", '', $link);
return $link_base . $link;
}
See this gist: http://gist.github.com/564465
This doesn't handle redirection from the old style author URLs, again, see the WP No Category Base source if you need to do that.