A year after posting this question, I'm getting a few extra comments and answers, which is really great. It is technically still a problem, but let me share what I've learned in the last year, in case anyone else stumbles on this page with a similar problem.
We came up with two inexpensive solutions to the problem which I think will work, in the right conditions.
- Use a high speed strobe light. This only works if the subject does not emit light (unfortunately not the case for me) and can be placed in a very dark room. Get hold of a very fast very accurate strobe light, then set it to go off at the same frequency as the cameras, say 50fps/50hz. Then set the shutter speed of all the cameras to 1/50th of a second, i.e. the shutter is always open. Place the subject in a very dark room, and set the aperture such that the video appears black without the light. Then illuminate with the strobe light. The videos will naturally be synchronised, because the only light they get is from the strobe, and it happens once per frame. Difficulty is getting a precise enough strobe. But I hear that they are used in heavy manufacturing operations to inspect blades/wheels/belts etc, which can't be turned off. You light the tool only with a strobe that has analogue control, and slowly increase the speed of the strobe, and as you reach the frequency of the tool it will appear to slow down, and eventually stop. Now you can inspect for problems. Just don't touch it ;).
- Use the vsync signal on the composite video out of the cameras. This is inspired by http://samj.snappages.com/. This signal is sent out regularly every frame, and with some electronics you can measure the difference between the signal on two (or more) different cameras. You can then power cycle the camera (or on some cameras, take a picture. More on that later...) and measure it again, and so on. If you are clever with the timing on the power cycling you can bring them closer and closer together to within a threshold. We didn't end up trying this just because we didn't end up building the circuit, and we figured this would just be too fiddly to work with, especially with more than 2 cameras.
As I said, we didn't end up doing either of these. We ended up putting in a bid for funding for a not-inexpensive system, one that is designed for this exact purpose, from a company such as NorPix. These are synchronised over ethernet and come set up. I was never able to find out how exactly (protocol etc) they use ethernet to synchronise, so if someone wants to explain that I'd be very interested. Last time I was updated, I was told we did find some money, but of course, if you know anything about academic bureaucracy you won't be surprised to find out that I'm still waiting for the equipment!
If anyone does have a magic idea that achieves true synchronisation inexpensively, I'm still open to suggestions.
To close, I will mention a strategy that did not work, in my tests. And that is the one on this website: http://3dfilmfactory.com/index.php?option=com_content&view=article&id=93:gen-lock-canon-5d-mark-ii-cameras-and-shoot-3d
Granted, we have different hardware, Canon 60Ds, and we had very cheap off-brand wireless shutter releases. However I have no reason to think they caused any noticeable difference to the setup in the link. I set up tests using an LED device, like Bokan suggested in his answer, and the average difference in synchronisation only dropped by about 1ms after using the wireless shutter release compared to the control tests, and sometimes it made it worse. I didn't do any statistical analysis, but I suspect it would not be significant compared to chance. I think it's very likely that 3D Film Factory either weren't shooting material in which they'd notice the synchronisation problem, or their more expensive hardware gave a slightly more reliable result which still isn't measurably that different. Scaling to more than 2 cameras, I'm confident that it's not a reliable method.
However, using the remote shutter release does reset the video. If you use the 'record' button on the cameras (or a remote), then it simply starts saving the footage that is already being processed. In other words, if you measure the synchronisation in several different tests without turning the camera off, taking a picture, or letting it go into power save mode, then the synchronisation will be the same. You could incorporate this mechanism into approach number (2) above: rather than power cycling the cameras it could take pictures until the vsync signals were in line. It would be a cool device, we just never got round to actually building it.
Thanks again for any suggestions. I hope someday someone will find this useful, and the months I wasted trying to solve it will save someone a bit of time!