The only thing I would like to discuss further is my choice of list. I didn't use a tree because the search facility was designed to check each and every node (it used strstr() to find strings within strings in any given field). If the list was a tree, it would have to traverse all the way to the left doing nothing, then all the way back to the far right, doing compares on each node as it went. Using the link list method, you just start at the beginning and traverse to the end, therefore isn't this faster? I admit that adding a new node would be slower, but as most of the time the user will be searching, rather than adding, I thought link list was the way to go. What do you think?
A good and valid reason. A binary tree searches no faster in the worst case situation than a linked list but insertion into the tree is quadratic. Though you still sacrifice efficiency since most users will search primarily for the name of the record instead of less memorable fields. Since you perform quite a bit of sorting, reading sorted data into a binary tree is expensive, and balancing routines are such a pain, I'd have to say that a linked list is a good implementation choice but could be better if specialized for searching. You lose the simplicity you have now, but consider how a skip list would improve your searching for a name in a sorted list.

-Prelude