names[i] is a pointer, having type char*. &names[i] is a pointer to names[i], and hence has type char**. A picture of some memory:
names for each i, this is where names[i] *points*
|__________________ 0 1 2 3 4
| | | | | | |
| | v v v v v
[0 ][1 ][2 ][3 ][4 ] <gap> peter0lisa0simon0sarah0julie0
^
|_This is where &names[2] points, i.e. this is where names[2] *is*
name is an array of 5 pointers, and I've depicted each pointer with square brackets and its index. Plus a space, because pointers are 4 byte on my machine. This is the situation just after names has been initialised. The separate chunk of memory on the right is a sequence of bytes, with each 0 indicating a 0 / NUL byte, not the character 0. It's the responsibility of the implementation (compiler, linker and loader working together) to assign memory for string literals - I have assumed that all of the string literals you've used will be clustered together, although that needn't be the case. Finally, the numbers 0 ... 4 indicate where each pointer in names is pointing to.
Since you're assigning to a char*, you need a char*. Or looking at it another way, pointers point to the same thing if (and only if) the pointers themselves have the same value. So if you want search_names[i] (which is a pointer) to point to the same thing that names[i] points to, then search_names[i] = names[i] is exactly right.
I don't know what the intent is of doing names[i]++, though. It modifies the pointer names[i]. Modifying a pointer makes it point to a different thing. In this case you'll end up with names[0] pointing to "eter", names[1] pointing to "isa", and so on.
Here's what memory looks like after you've incremented each pointer in names:
names
|_____________ 0 1 2 3 4
| | | | | | |
v v v v v v v
[0][1][2][3][4] peter0lisa0simon0sarah0julie0
By the way, you're allowed to assign a string literal to char*, but that doesn't mean you should. It would be better to declare your arrays const char *names[SIZE]. It's undefined behaviour to modify the memory which the compiler has assigned for a string literal, and using a const char* rather than a char* helps enforce that.