Interleave data using Java
Optimization 1
Instead of constantly doing Character.getNumericValue(pattern[j])-1 in the inner loop, you could create a precomputed integer array to hold those values.  That way, you could replace that expression with patIndex[j].
Optimization 2
Instead of using multiple instances of StringBuilder, you could use and reuse a single char array and create strings from that.
Optimization 3
Instead of creating a char array from your designs[i] string, you could just leave designs[i] as a string and use String.charAt() to read each character.
Sample rewrite
Using the above 3 optimizations, I arrived at:
static String[] applyInterleave(String interleave, int lengthOfSequence,
        int numOfPermutations)
{
    String[] interleavedPatterns = new String[numOfPermutations];
    char  [] pattern  = interleave.toCharArray();
    int   [] patIndex = new int[lengthOfSequence];

    for (int i = 0; i &lt; lengthOfSequence; i++) {
        patIndex[i] = Character.getNumericValue(pattern[i])-1;
    }

    for(int i = 0; i &lt; numOfPermutations; i++) {
        String s = designs[i];
        for(int j = 0; j &lt; lengthOfSequence; j++) {
            pattern[j] = s.charAt(patIndex[j]);
        }
        interleavedPatterns[i] = new String(pattern);
    }
    return interleavedPatterns;
}

I tested this against the original function and found that it was approximately 3x faster.