As has been mentioned, using LIKE means it will match any value that contains the letter, regardless if the letter is at the start or not. So using LIKE probably won't get you what you want.
The approach in WordPress seems to be using the "BETWEEN" comparison, so that it will match any value where the word is between one letter and the subsequent letter.
Per the tutorial at http://www.essentialwp.com/tag/meta_query/, you can get the character you want the word(s) to start with, and then use PHP functionality to find the subsequent character, which allows you to filter the results correctly.
// Get the value for surname and attach it to a variable
$letter = $_GET['surname'];]
// We need to establish the letter after the first letter from $letter, so in this case 'D'
$letterAfter = chr(ord($letter)+1);
// Craft a custom wp_query call
$args = array(
'post_type' => 'profiles', // use this if you are using a custom post type
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'surname', // name of your custom field
'value' => array( $letter, $letterAfter ),
'orderby' => 'meta_value',
'compare' => 'BETWEEN',
'order' => 'ASC'
)
)
);
$wp_query = new WP_Query( $args );
// then run your loop....
You'll likely need to handle the letter Z differently, see Get the users by first name start with letter “Z”
You might also be interested in Most efficient way to get next letter in the alphabet using PHP