You can make use of simple regex .*(greedy regex to make longest possible match) to find both strings in a single line. You can try following code, based on your attempt.
$ cat somestrings.txt
hello charles dickens
hello charles russel
hello charles dyckens
hello dickens charles
$
$ # find in either order ....
$
$ grep charles somestrings.txt | grep dickens
hello charles dickens
hello dickens charles banana
$
charles.*dickens means any characters in between.
In other words, dickens must be to the right of charles.
A real AND would also allow dickens to the left of charles; this can be coded as