Similar to @Jimmy Chandra's idea, but use a single link column.
So, you might have these columns:
ID | SortAfterID | OtherColumn1 | OtherColumn2
Now, let's say you have five records with IDs 1 through 5, and you want record 5 to be sorted between 2 and 3. Your table would look something like this:
ID | SortAfterID | OtherColumn1 | OtherColumn2
1 | NULL | ... | ...
2 | 1 | ... | ...
3 | 5 | ... | ...
4 | 3 | ... | ...
5 | 2 | ... | ...
I would set a constraint so that SortAfterID references ID.
If you now wanted to insert a new record (ID = 6) that goes between 1 and 2, you would:
- Insert a new record with ID = 6 and SortAfterID = 1.
- Update record with ID = 2 so that SortAfterID = 6.
I think this should be pretty low maintenance, and it's guaranteed to work no matter how many times you cram. The floating point number idea by @richardtallent should work as well, but as he mentioned, you could run into a limit.
EDIT
I just noticed the paragraph at the end of @richardtallent answer that mentions this same idea, but since I typed this all out, I figure I'll keep it here since it provides a little extra detail.