Ninja Gaiden's sprite graphics are 4bpp. The data for sprites is stored on multiple 8-bit ROMs. You're going to need to combine these ROMs to see more than 2bpp. From MAME's source code:
ROM_LOAD16_BYTE( "6.3m", 0x000000, 0x20000, CRC(e7ccdf9f) SHA1(80ffcefc95660471124898a9c2bee55df36bda13) ) /* sprites A1 */
ROM_LOAD16_BYTE( "7.1m", 0x000001, 0x20000, CRC(016bec95) SHA1(6a6757c52ca9a2398ea43d1af4a8d5adde6f4cd2) ) /* sprites A2 */
ROM_LOAD16_BYTE( "8.3n", 0x040000, 0x20000, CRC(7ef7f880) SHA1(26ba9a76adce24beea3cffa1cb95aeafe6f82f96) ) /* sprites B1 */
ROM_LOAD16_BYTE( "9.1n", 0x040001, 0x20000, CRC(6e9b7fd3) SHA1(c86ff61844fc94c02625bb812b9062d0649c8fdf) ) /* sprites B2 */
ROM_LOAD16_BYTE( "10.3r", 0x080000, 0x20000, CRC(a6451dec) SHA1(553e7a1453b59055fa0b10ca04125543d9f8987c) ) /* sprites C1 */
ROM_LOAD16_BYTE( "11.1r", 0x080001, 0x20000, CRC(7fbfdf5e) SHA1(ab67b72dcadb5f2236d29de751de5bf890a9e423) ) /* sprites C2 */
ROM_LOAD16_BYTE( "12.3s", 0x0c0000, 0x20000, CRC(94a836d8) SHA1(55658f4c6cf6aadc4369b943705f5734396b2e43) ) /* sprites D1 */
ROM_LOAD16_BYTE( "13.1s", 0x0c0001, 0x20000, CRC(e9caea3b) SHA1(39ef300e7dfd9469f04127d5a06dceb0b7e357f8) ) /* sprites D2 */
So you need to combine roms 6.3m & 7.1m to get the first 0x40000 of sprite graphics data. And the same for 8&9, 10&11, 12&13. After you combine them I *think* using the Sega Genesis mode in most tile editors will work. I wrote my own emulator for Ninja Gaiden as well as Genesis and if I'm remembering correctly it has the same format. I could be mistaken as it has been awhile.
So if you can program all you need to do is interleave the ROMs and then reverse that process after editing. You should probably copy the even and odd roms using a command like like this: copy /b 6.3m + 8.3n + 10.3r + 12.3s EvenGfx.Bin
And then do the same for the Odd ROMs, then interleave the OddGfx.bin and EvenGfx.bin