Attach #ajax to submit button created in hook_form_alter with #markup
You cannot, since the #ajax attribute is not used for the markup item. You can use an image_button form element.

If the image_button form element doesn't render as you want and it is not possible to alter it the way you want, you need to implement a new form element with hook_element_info(), using the definition of the image_button form element as guide.

  $types['image_button'] = array(
    '#input' =&gt; TRUE,
    '#button_type' =&gt; 'submit',
    '#executes_submit_callback' =&gt; TRUE,
    '#limit_validation_errors' =&gt; FALSE,
    '#process' =&gt; array('ajax_process_form'),
    '#return_value' =&gt; TRUE,
    '#has_garbage_value' =&gt; TRUE,
    '#src' =&gt; NULL,
    '#theme_wrappers' =&gt; array('image_button'),
  );


The theme function that renders that form element is theme_image_button(). Changing the value of #theme_wrappers, you can alter the way your form element is rendered.
Keep in mind that theme wrappers, as any other theme functions, need to be declared with hook_theme().