Für 2D kannst du auch OpenGL verwenden. OpenGL ist zwar hauptsächlich für 3D Anwendungen gedacht, kann aber auch im Ortho-Modus mit 2D bestens umgehen.
Das heißt, es ist eigentlich nie 2D, sondern wird mittels einer parallelperspektive auf eine Leinwand gemappt, anstatt in einem 3D-Raum. Aber für den Benutzer sieht es eben 2D aus. Außerdem bietet dir OpenGL mittels der dritten Ebene eine ganz simple Lösung um Grafiken in der richtigen Höhe anzuordnen. (Also weiter hinten stehende Objekte hinter vorne stehenden Objekten anzuordnen)
Dies geht nämlich mittels der Z-Komponente, also der Tiefe im 3D-Raum, ohne großen Rechenaufwand. Und trotzdem sieht es nach wie vor 2D aus.
Ich empfehle dir ein paar OpenGL Tutorials zu machen, die starten meist mit dem Grundgerüsst zum öffnen des Rendercontexts und dann einfache Objekte, Dreiecke, Quader etc. Wenn du das kannst, such nach einem Tutorial welches 2D erklärt, stichwort die glOrtho()-Funktion.
Alternativ zu OpenGL kannst du auch Direct Draw aus dem DirectX Packet verwenden. Direct Draw ist extra für 2D Anwendungen, im gegensatz zu Direct 3D, welches für 3D gedacht ist (wer hätte das vermutet? ^^)
Mit DirectX kenne ich mich aber garnicht aus, kann dir also nur zu OpenGL was sagen. Und es ist im 2D-Modus recht simpel, mit nem guten Monat einarbeitung konnte ich bereits erste erste Maps für ein Spiel darstellen, wo verschiedenen Texturen auf Quader gemappt wurden, und das bei über 700 Fps.
(OpenGL ist also auch im 2D-Modus sehr flott - system ist Durchschnitt mit Athlon 64 3000+ und Radeon X800 XT)
Um dir mal ein Beispiel für eine 2D Szene in OpenGL zu geben, hab ich hier ein Screenshot meiner Engine von damals:
http://derfeind2k.de/daten/mapedit%209.0_soll.png
Auf dem Bild sieht man noch meinen Karteneditor, der in C++ mit WinAPI geschrieben wurde. Rechts im Fenster wurden die Texturen eingeladen, in der Mitte ist der Kartenbereich, wo die Objekte platziert und dargestellt wurden. In der eigentlichen Engine ist der Renderbereich mit der Grafik natürlich Vollbild (bzw Fenstermodus aber ohne den Editorbereich) und verfügt über eine Steuerung der Spielfügur, Pixelgenaue Kollision, Animationen etc.
(Und lass dich nicht von der schlechten Grafik abschrecken, die ist selbsterstellt, daher keine großartige Qualität. Es kann aber jede beliebige Grafik gängiger Formate wie BMP, TGA, TIFF, JPG etc dargestellt werden, auf Wunsch mit Alphatransparenz und allerlei Effekte-Spielereien).
Die angesprochenen Dinge wie Flash sind dann natürlich dort geeignet, wo du es für Onlinegebrauch bereitstellen willst. Soll es eine Offline-Engine werden, die ein eigenständiges Programm ist, und nicht im Browser stattfindet, dann brauchst du dafür kein Flash.
Und wenn du OpenGl verwendest bist du dahingegen auf der sicheren Seite, dass du jederzeit auf 3D umsteigen kannst, wenn du das willst.