First of all, the PS2 ignores the section headers, you can ignore or even remove them without problem.
If you want to add data, you have to edit or add an entry in the program headers.
As to where the stack and heap are located, check near the entry point for a bit of code similar to this:
00100198 7D 00 04 3C lui $a0, 0x7D # gp
0010019C F6 01 05 3C lui $a1, 0x1F6 # stack
001001A0 0A 00 06 3C lui $a2, 0xA # stack_size
001001A4 96 00 07 3C lui $a3, 0x96 # args
001001A8 10 00 08 3C lui $t0, 0x10 # root_func
001001AC F0 4B 84 24 la $a0, unk_7D4BF0 # gp
001001B0 00 00 A5 24 li $a1, 0x1F60000 # stack
001001B4 00 00 C6 24 li $a2, 0xA0000 # stack_size
001001B8 80 E1 E7 24 la $a3, dword_95E180 # args
001001BC 20 02 08 25 la $t0, sub_100220 # root_func
001001C0 25 E0 80 00 or $gp, $a0
001001C4 3C 00 03 24 li $v1, 60 # SetupThread
001001C8 0C 00 00 00 syscall 0
001001D0 9B 00 04 3C lui $a0, 0x9B # heap_start
001001D4 00 00 05 3C lui $a1, 0 # heap_size
001001D8 80 EB 84 24 la $a0, 0x9AEB80 # heap_start
001001DC FF FF A5 24 li $a1, 0xFFFFFFFF # heap_size
001001E0 3D 00 03 24 li $v1, 61 # SetupHeap
001001E4 0C 00 00 00 syscall 0
You may need to edit this code if you expand the loaded segment into the heap.