What if you remove them all, restart, then re-add them in your preferred order?
Or, in Firefox 3.6, your search engine settings are stored in search.sqlite in your profile folder. On Windows XP it's something like
C:\Documents and Settings\yourname\AppData\Roaming\Mozilla\Firefox\Profiles\randomstuff\search.sqlite
You could download sqlite, extract the file into somewhere (e.g. c:\sqlite), close Firefox completely, then open a Command Prompt and do something like this:
c:\> set PATH=%PATH%;c:\sqlite
c:\> cd %APPDATA%
c:\> cd Mozilla\Firefox\Profiles
c:\> cd <TAB>
c:\> sqlite3 search.sqlite
sqlite> .schema
CREATE TABLE engine_data (id INTEGER PRIMARY KEY, engineid STRING, name STRING,
value STRING);
sqlite> PRAGMA table_info('engine_data');
0|id|INTEGER|0||1
1|engineid|STRING|0||0
2|name|STRING|0||0
3|value|STRING|0||0
sqlite> select * from engine_data;
2|[app]/google.xml|order|1
3|[app]/yahoo.xml|order|2
4|[app]/wikipedia.xml|order|3
5|[app]/amazondotcom.xml|order|4
6|[app]/answers.xml|order|5
7|[app]/creativecommons.xml|order|6
8|[app]/eBay.xml|order|7
9|[app]/google.xml|used|1
sqlite> update engine_data set value=2 where name='order' and engineid like '%wikipedia%;
sqlite> update engine_data set value=3 where name='order' and engineid like '%yahoo%;
sqlite> update engine_data set value=4 where name='order' and engineid like '%ebay%;
sqlite> .quit
Where you change the number after value= to whatever number you want and the bit between the % to one of the options printed by select * from engine_data;.