Yes, changing the character set (and collation) spoils the use of an index. The optimizer can't rely on the collation you specify alphabetizing strings in the same way they're stored in the index, so therefore it doesn't use the index.
If you use a case-insensitive COLLATION, you don't have to do this BINARY LOWER expression at all.
mysql> select 'apple' = 'Apple';
+-------------------+
| 'apple' = 'Apple' |
+-------------------+
| 1 |
+-------------------+
The "ci" suffix in collations indicates case-insensitivity.
mysql> show session variables like 'collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
So just do the simple string comparison (provided you have set the collation order for this table to a ci collation):
SELECT keywords.* FROM `keywords` WHERE `name` = 'Apple' AND `country` = 'US');
Re your comment:
Comparing accented characters depends on the character set and collation.
mysql> SELECT 'Lé' = 'le';
mysql> SET NAMES latin1 COLLATE latin1_general_ci;
mysql> select 'lé' = 'Lé';
+---------------+
| 'lé' = 'Lé' |
+---------------+
| 1 |
+---------------+
mysql> select 'lé' = 'Le';
+--------------+
| 'lé' = 'Le' |
+--------------+
| 0 |
+--------------+
I can't find a Unicode collation in MySQL that treat accented characters as different, but preserves case-insensitivity.