The C convention for strings is null termination and that includes syscall apis like execve.
Even it were possible to circumvent the execve shim to the kernel syscall interface, it would be invalid for the kernel to support args with real embedded nul bytes into the process table as the syscalls, libraries, tools and interfaces (eg procfs) around process management would also show truncated process arguments even if it were possible.
If you are interested in calling the linux kernel execve syscall, directly the following article may be useful: http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html?m=1
Once you read that article you will see that the execve api is fundamentally an array of nul terminated strings, which is passed to the kernel which it processes.
TL;DR there is no getting around it.