We dive in significant current often in our local waters. We generally drift into wrecks, but once on a particular reef or wreck, we may want to be stationary. There are a lot of tricks to dealing with current.
There is no substitute for physical strength and endurance. There is no substitute for good powerful fins.
The main theme is probably that you are weak and can not fight currents. You (as all scuba divers) are pretty terrible at moving against a current - even the smallest fish can do a better job. So once you realize that you can not really swim against any significant current for any significant time (without blowing through an incredible amount of air and probably getting a CO2 headache) you have to be smart.
If you MUST move against a current - crawl - hold onto the wreck or dead portions of a reef. You can literally hold yourself by one finger easier than you can swim against the same current and hold position. Try to get your body down close to the reef or wreck, the velocity drops off as you get within a foot or so of the bottom.
Think like a bird... you never see a bird perched with his back to the wind... when you stop to look at somehting, spin around and keep you head into the current - it is more natural, more streamlied and allows you to actually swim against it. Try holding onto something with your butt and fins into the current, it will try to flip you over.
If crawling along the bottom, you want to probably dump all air from the BC and be as heavy as possible - this gives you stability in the current.
Watch the fish, they tend to congregate in eddies and often in still areas behind reefs or wrecks.. not always, but pay attention to the fish.. they too will almost always have their face to the wind and if they are swimming hard, there is current, if they are resting, not much in that particular area.
Duck behind the reef and wreck, avoid the current - it makes a huge difference. IF you do have to move against a current (assuming a reasonable distance and a reasonable current) do NOT swim slow! Swim FAST! Swim at maybe 70 or 90% of your capacity, shoot across or through the current and find another hand hold. if you try to swim 30 feet slow and steady against a current, you may end up kicking away for 90 seconds and getting almost no where. this will waste a lot more air and effort than a quick sprint.
This video at around 5:15 shows my 14 yr old son dealing with a pretty strong current, when he goes from one hand hold to another one up current; he has to follow me and traverse a short open area with no real hand hold.. So he follows my lead and sprints the short distance in a few seconds. The point is to conserve energy, use power when you need to, but realize that you can not swim hard for long at all.
Surge is another specialty. It can be very strong. You definitely do not want to fight surge. You cling to the bottom, allow the surge to pass over you and then on the back flow, you release and kick and glide for the duration and find another hand hold. If you miss and go backwards, it is often better to just allow yourself to be propelled backwards, than try to kick super hard and fight the surge. You can actually ride a surge in or out, if you are smart and ride the energy and avoid fighting it. I don't have any decent examples of surge diving.