Zu 1)
Es gibt noch eine dritte Möglichkeit, die ich persönlich nutzen würde. Ein Eindimensoniales Array und das Umrechnen der Koordinaten.
Damit würdest du dir die Unmengen an zusätzlichen Arrays bei der 2d-Array-Variante sparen. Solange deine Karten aber nicht plötzlich Dimensionen von um die 1000 Tiles annehmen sollte es wohl keinerlei großen Performance-Probleme kommen.
Generell, mach dir Gedanken um die Performance wenn es wirklich darauf ankommt, also wenn du merkst, daß es irgendwo im Spiel hakt.
Zu 2)
Ich nehme an du willst im Prinzip eine Tilemap haben, die es dir erlaubt dynamisch während des Spielverlaufs Tiles zu ändern, oder?
Im Prinzip benötigst du dafür nur 1 Sprite und 2 Bitmaps.
Das Sprite repräsentiert deine Karte, deine beiden Bitmaps sind das Bitmap im Sprite (die aktuelle Karte) und das Tileset. Die Tiles beinhalten dann einfach die Information von welchen SRC_RECT aus dem Tileset ein 32x32 Klumpen auf die Map geblittet werden soll.
Bei den Autotiles kannst du es ähnlich machen, nur das du anstatt der direkten Zeichen-Operationen du dir die Nachbartiles anguckst und dementsprechend entscheidest welche AutoTile-Kachel verwendet werden muss.
Damit hast du zwar etliche Blit-Operationen aber du erstellst und löschst nicht dauern Bilder und du musst diese Blit-Operationen nur durchführen wenn die Karte das erste mal geladen wird, oder du irgend eine Kachel änderst.
Ansonsten kannst du dir ja mal angucken wie Spriteset_Map arbeitet.