As Salem said, sleep functions are a minimum guarantee. The reason for it being such a dramatic delay compared to your expected 1 microsecond is because a sleep function is a signal to the kernel that it can context switch to another process. So, no matter what argument to usleep, you'll trigger a context switch to another process that is waiting to run.
For more information on accurate, short delays under Linux, see
http://www.linux.com/howtos/IO-Port-Programming-4.shtml
If the delay length is critical, you might want to consider "real time linux" at
http://www.fsmlabs.com/