So the page load time of searchindex.js, and the total time before the whole page is rendered is the same. But the parsing of searchindex.js happens at a later stage, so that the page onload() event occurs significantly (300-600 ms) earlier.
(The results marked with a star * are those which do not load at all in the Chrome browser.)
Here is how:
var sil = document.getElementById("searchindexloader");
sil.src = "searchindex.js";;
This is plain JavsScript; Likely there are similar ways to achieve this with jQuery too. (I haven't found them yet, as I'm not a jQuery expert). At least this works, and has the important benefit that it works on all browsers. I strongly recommend to use this method, at least as a fail-over method.
The timing of this fail-over method is actually somewhere between the current jQuery method and the plain HTML inclusion method:
As you can see the page renders soon (the DOMContentLoaded time) while the building of the search result list starts later (the onload() event time). The total page load time is not affected.
If you think the time is good enough, feel free to use the above code. If you prefer the jQuery method, I strongly suggest to use this method as a fail-over, so that the code does also work in Chrome. Here is how:
(For some reason, the success function was called, despite that the URL failed to load. I added the fail-over method also to the error function, since I'm not sure if the behaviour has changed in jQuery 1.5 -- the source I used for testing still had jQuery 1.4, and I know there have been some changes to these error functions in jQuery 1.5.).
Thanks for listening, and let me know what method you prefer, in case you like me to prepare an actual patch. (I'm sure a better programmer than I am can find a way to make this work with jQuery, perhaps even without the empty HTML script tag.)