Buenas,
Creo que te has complicado en demasía, con el for_each. Te explico rápido, cuando haces el $row = mysql_fetch_array($result) en $row, como tú bien dices, tienes un array con los valores del resultado de un registro (una fila completa) de la tabla, pero te complicas a la hora de utilizar $row. Si es un array cuyo índice es el nombre de la columna de la tabla y contenido el valor de dicho registro, por qué no utilizas directamente $row['titulo']?
Yo lo haría así (suponiendo que el Nombre está en título y el Codigo en codigo):
Código PHP:
<?php
////////////////////////////
// Proceso del Formulario
///////////////////////////
if(isset($_POST['enviar'])) {
// Solo se ejecuta si se ha enviado el formulario
$query = "SELECT codigo, titulo FROM $bd_tabla WHERE titulo LIKE '%{$_POST['palabra']}%'";
$result = mysql_query($query, $link);
$found = false; // Si el query ha devuelto algo pondrá a true esta variable
while ($row = mysql_fetch_array($result)) {
if (!$found) $found = true;
echo '<input type="radio" name="grupo" value="' . $row['titulo'] . '">' . $row['titulo'] . '<br>';
}
if (!$found) {
echo '<p>No se encontró la palabra introducida</p>';
}
}
?>
Espero que te sirva, un saludo.