if you want to use the indexing thing as you describe it, here's one way of doing it. (I'm used to using MSSQL and Oracle, so my syntax might be slightly different than for MySQL)
Code:
create table phones
(phnid integer,
phnno varchar(20),
phnname varchar(20),
alphasort integer)
insert into phones values (1, '505-4977', 'Tom', 3)
insert into phones values (2, '505-4978', 'Tim', 2)
insert into phones values (3, '505-4979', 'Jim', 1)
select min(alphasort) from phones where phnname => Tim'
will return 2
you can then offer the details associated with alphasort number 2, or add 1 for the next, or minus 1 for the previous.
You will have to reindex the list every time someone enters a new number though.
This could be done using a cursor (if they are supported by MySQL, or programmatically by loading an ordered select and then doing some iterated updates)
It would be handy to do this re-indexing via SQL, but I'm not sure I know how to do that without resorting to stored procedures etc - if anyone does, it would be a VERY useful thing to know - please post!