One of the best stratagies I've used is courtesy of the wonderful G/S walkthrough Versus Books made way back when (which I wish I still had). This method is pretty simple, and applies to every game you can catch the legendary runners in, not just G/S. This is also how I caught them myself.
1. Grab a Pokemon with a sleep-inducing move. If you have the patience to raise a Parasect, use that, since Spore never misses. Otherwise, use something like a Haunter or a Noctowl with Hypnosis.
2. Always, ALWAYS, buy Max Repels. I'm sure you knew this already, but it's worth restating. =P
3. Grab an HM slave with Fly, and Fly to a central location (I.E. Violet City in G/S). Since you're playing FireRed, I'd recommend Saffron City. You do know that every time you switch locations, the runners swith theirs as well. So, if you have run into Suicune at least once, check its Pokedex pages for a location. If Suicune is near you, head towards it (say, for example, you Fly to Saffron, and one is on Route 7, head East to intercept it). If not, Fly again, to the same city, and re-shuffle its locations. If you haven't run into it yet, well... you'll be searching a little more blindly. Keep in mind that, more than likely, when you try to intercept, it will run to another location again. It'll take a while to run into it, but it's really the best way to do so.
4. Once you finally manage to find Suicune, battle it. I'm sure you're aware that it'll run away almost immediately. It also knows Roar, so moves like Mean Look won't do you much good. You'll get one chance here to make a move, and with it, you can do one of two things:
A: Bring out your sleeper Pokemon, and attempt to put it to sleep. If you can manage to get the sluggish Parasect to attack first (assuming you went through the trouble of raising one), then you're in good shape, since Spore is the best sleep-inducing move around. Otherwise, you'll just have to rely on something else like Haunter to hopefully manage to get a low-accuracy move like Hypnosis to work.
B: Bring out your strongest Pokemon, and attack it. Seriously. Lay some damage on it to take its HP way down; not enough to faint it, but enough to leave it in the orange/red. I'm not sure if this still holds true in FireRed, but in G/S, whenever you inflicted damage on any of the runners, they don't heal, even after running away. The damage you inflict always stays, even in future encounters, making the chances of catching one better after battling it a couple of times.
5. Option B takes longer, but works best in the end. The problem with most sleep-inducing moves is their horrible accuracy. If you're feeling lucky enough to try that, then go ahead, since it may save you the trouble of trying to find it again. But, if it does run, that's one wasted attempt. You might as well try to damage it somewhat the first time, since the pain should stay with it, provided that factor hasn't changed in the 3rd gen.
6. Even with low-HP and sleep, the runners are still difficult to keep in the Poke-balls, Suicune included. Ultra-balls aren't really all that great, but their really the best option you have. I remember Heavy-balls working great in G/S (the ones made from Black Apricorns), but I don't think those are in FireRed (I'm not sure, to be honest, since I lost my copy a while ago, and haven't played in a long time).
7. If you haven't used your Master Ball yet, then save yourself the catching trouble and just use that. I mean, it's not like Mewtwo is going anywhere. Just follow the steps to run into it, and you should be fine.
All of this should work pretty well for you, since it did for me. Keep in mind most of this is aimed to G/S, but it should work for any version that you have to catch the legendary runners in, since it's a pretty standard guide.