The 46-year-old Els, who has dropped to 205th in the world after struggling with yips over the past year, shot a 5-under 67 to move to within one shot of the lead at the halfway stage of a tournament he has won three times.
Spain's Rafael Cabrera-Bello, winner here in 2012, shot his second consecutive 67 to grab a one-stroke lead heading into the weekend.
Els, who was tied with compatriot Trevor Fisher Jr. and England's Danny Willett at 9-under, made several crucial par putts to keep a bogey-free round.
"It's an exact turnaround from a couple weeks ago where I was dreading to get on the greens," he said. "I'm actually enjoying it on the greens. The surfaces are just unbelievable and I've got a lot more confidence in the stroke and in the setup and all of that stuff. It has almost got a smile out of me right now."
Defending champion McIlroy shot a 72 to finish at 4-under 140 after two rounds, six shots off the lead. He had three birdies in his last three holes.
"I struggled in the wind a little bit and didn't get off to the best of starts again," McIlroy said. "Being 2-over through four on this golf course when you have a couple of good birdie chances wasn't great."
"The middle of the round was tough," he added. "There were a few holes that were playing really tough, and I struggled on those, but I bounced back well and persevered and got something out of the round in the end. I just need to make sure I get off to a fast start tomorrow."
Cabrera-Bello, who had just one bogey in his first 36 holes, credited his putter for his strong showing Friday.
"I mean, today has been a little bit of a different round to yesterday," the Spaniard said. "Yesterday, I really felt I played great until the green. I gave myself lots of chances.
"And today was the exact opposite. I didn't play as good, as sharp. It was windy. I didn't quite find my tempo but the putting was extremely hot today. I rolled one of the best putting rounds of my life today, so that made up for everything else."
Henrik Stenson shot a 68 to stay in contention at 137, but Louis Oosthuizen was among those who missed the cut. Also missing the cut were Germany's Martin Kaymer, European Ryder Cup captain Darren Clarke, Graeme McDowell, two-time Dubai champion Stephen Gallacher and Thailand's Thongchai Jaidee.