Neither custom routes nor the _remap() technique directly address this problem.
Custom Routes would work if you had a pattern, such as:
<a href="http://www.site.com/user-coolfactor/">http://www.site.com/user-coolfactor/</a>
Then you could match the “user-” pattern, but that’s not what you want.
The _remap() function only works once a controller has been chosen, so that needs to be done first, which is the essence of the problem to begin with.
Personally, I would override the Router library with a MY_Router.php library and have a function in there that looks at the first segment of the url, checks a database for a matching username, and if it finds one, rewrites the url with the /member/ controller name. Otherwise, it simply passes control along to the default router, which would handle the request natively. Alternatively, it could see if the first segment matched one of the controllers, but this could could be complex if you plan on nesting controllers in subfolders (a feature of CI).
I use this technique for special handling of images, css, and javascript files that I keep in my views folder. Whenever MY_Router sees “img”, “css”, or “js” as the first segment, it attempts to return the appropriate resource. Otherwise, routing continues normally.
<a href="http://www.site.com/img/some_image.jpg">http://www.site.com/img/some_image.jpg</a>
<a href="http://www.site.com/js/admin.js">http://www.site.com/js/admin.js</a>
...etc.
Works like a charm.