Instead of trying to fix your existing code let's try solving the problem afresh. You show the examples:
ListA: [], ListB: [] => ResultList: []
ListA: [], ListB: [a,b,c] => ResultList: [[a],[b],[c]]
ListA: [1,2], ListB: [a,b,c] => ResultList: [[1,2,a],[1,2,b],[1,2,c]]
and
?- extend_my_path([a,b,c], [1,2], [], Result).
Result = [[1,2,a],[1,2,b],[1,2,c]]
The third argument looks completely out of place, and the first and the second arguments are swapped compared to the first batch of examples, so let's say it's supposed to be
?- ListA = [1,2], ListB = [a,b,c], extend_my_path( ListA, ListB, ResultList).
ResultList = [[1,2,a],[1,2,b],[1,2,c]]
So we start coding by just listing the cases we know must hold:
extend_my_path_ex( [], [], []).
extend_my_path_ex( [], [a,b,c], [[ a],[ b],[ c]]).
extend_my_path_ex( [1,2], [a,b,c], [[1,2,a],[1,2,b],[1,2,c]]).
Generalizing it gives us
extend_my_path3( [], [], []).
extend_my_path3( OneTwo, [A,B,C], [OneTwoA,OneTwoB,OneTwoC]):-
append( OneTwo, [A], OneTwoA),
append( OneTwo, [B], OneTwoB), % ... right? all the examples produce
append( OneTwo, [C], OneTwoC). % the same answers. check it!
And what if there were only two of them?
extend_my_path2( [], [], []).
extend_my_path2( OneTwo, [B,C], [OneTwoB,OneTwoC]):-
append( OneTwo, [B], OneTwoB),
append( OneTwo, [C], OneTwoC). % ... right?
So we can actually just re-write it syntactically as
extend_my_path3( [], [], []).
extend_my_path3( OneTwo, [A | [B,C]], [OneTwoA | [OneTwoB,OneTwoC] ]):-
append( OneTwo, [A], OneTwoA),
extend_my_path2( OneTwo, [B,C], [OneTwoB,OneTwoC] ).
But look! Whatever we were doing with the three elements, we are doing the same thing, essentially, with the two.
And why should we limit ourselves to the three, or the two elements cases only? There's nothing special about those. Let's generalize once more,
extend_my_path( [], [], []).
extend_my_path( OneTwo, [A | B_C], [OneTwoA | OneTwoB_OneTwoC ]):-
append( OneTwo, [A], OneTwoA),
extend_my_path( OneTwo, B_C, OneTwoB_OneTwoC ).
Can you take it from here?